Не могу сдать код на LeetCODE "Add Two Numbers"
Написал код.
l1 = [2, 4, 3]
l2:list = [5, 6, 4]
itog:list = []
temp3:int = l1[-1] + l2[-1]
for i in range(len(l1)):
if len(l1) < i + 1:
l1.append(0)
if len(l2) < i + 1:
l2.append(0)
temp:int = l1[i] + l2[i]
if temp >= 10:
temp1:int = temp // 10
temp = temp % 10
l1.append(0)
l1[i + 1] += temp1
itog.append(temp)
if temp3 >= 10:
temp4:int = temp3 // 10
itog.append(temp4)
print(itog)
В VScode и cmd всё работает корректно. Сдать не могу. Объясните пожалуйста, что я делаю не так.
Ответы (3 шт):
Это можно сделать так:
# Списки чисел
list1 = [2, 4, 3] # Первый список цифр
list2 = [5, 6, 4] # Второй список цифр
# Делаем числа строками
list1 = [str(i) for i in list1]
list2 = [str(i) for i in list2]
# Соединяем строки, переворачиваем, переводим в число
num1 = int(''.join(list1)[::-1])
num2 = int(''.join(list2)[::-1])
# Складываем числа, переводим сумму в строку
str_ = str(num1 + num2)
# Переводим каждую цифру в число
lst_s = [int(i) for i in str_]
# Печатаем список чисел наоборот
print(lst_s[::-1])
Там еще нужно сделать обертку над этим кодом с помощью class Solution.
Чисто из любви к искусству, решение без использования перевода в строки.
- Считаем числа путем сложения произведения каждой составляющей цифры на 10 в соответсвующей степени. Числа складываем.
- Превращаем результат в список путем деления на 10 по модулю результата от деления нацело на 10 в степени позиции числа.
- Длину числа получаем через применение десятичного логарифма.
import math
print(
(lambda num: [(num // (10**i)) % 10 for i in range(1 if not num else int(math.log10(num)) + 1)])
(sum(n * 10**i for i, n in enumerate(l1[::-1])) + sum(n * 10**i for i, n in enumerate(l2[::-1])))
)
Решение на LeetCode должно следовать заданному формату. Вам указан класс Solution
, метод addTwoNumbers
, типы параметров и тип возвращаемого значения. В этот шаблон должно быть уложено ваше решение, обычно достаточно дописать тело метода.
То что вы написали в вопросе, оно про другое, мягко говоря. Вы, видимо, пропустили обучение на LeetCode, где вам объясняют что и как решать, и сразу перешли к интересным задачам. Это не хорошо. Робот, который проверяет решения, не знает что делать с вашим кодом.
Алгоритм напоминает то, что нужно, но работает на списках (в питонячем смысле) а должен работать на односвязных списках (цепочках узлов с цифрами):
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def addTwoNumbers(
self, l1: Optional[ListNode], l2: Optional[ListNode]
) -> Optional[ListNode]:
root = ListNode()
carry = 0
node = root
while carry > 0 or l1 is not None or l2 is not None:
d1 = 0 if l1 is None else l1.val
d2 = 0 if l2 is None else l2.val
carry, d = divmod(d1 + d2 + carry, 10)
node.next = ListNode(d)
if l1 is not None:
l1 = l1.next
if l2 is not None:
l2 = l2.next
node = node.next
return root.next