Не могу сдать код на 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 шт):

Автор решения: u111

Это можно сделать так:

# Списки чисел
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.

→ Ссылка
Автор решения: Alexey Trukhanov

Чисто из любви к искусству, решение без использования перевода в строки.

  1. Считаем числа путем сложения произведения каждой составляющей цифры на 10 в соответсвующей степени. Числа складываем.
  2. Превращаем результат в список путем деления на 10 по модулю результата от деления нацело на 10 в степени позиции числа.
  3. Длину числа получаем через применение десятичного логарифма.
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])))
)
→ Ссылка
Автор решения: Stanislav Volodarskiy

Решение на 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
→ Ссылка