MyTetra Share
Делитесь знаниями!
Задача Add Two Numbers
Время создания: 15.11.2023 11:31
Автор: Xintrea
Раздел: Компьютер - Программирование - Алгоритмы - Решение задач LeetCode.com
Запись: xintrea/mytetra_syncro/master/base/17000370886ddvu9uohh/text.html на raw.github.com

Add Two Numbers

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

 

Example 1:

Input: l1 = [2,4,3], l2 = [5,6,4]

Output: [7,0,8]

Explanation: 342 + 465 = 807.

Example 2:

Input: l1 = [0], l2 = [0]

Output: [0]

Example 3:

Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]

Output: [8,9,9,9,0,0,0,1]


Решение:


# 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]:


a=0

mul=1

while l1 is not None:

a += l1.val * mul

mul *= 10

l1 = l1.next


b=0

mul=1

while l2 is not None:

b += l2.val * mul

mul*=10

l2 = l2.next


summ=a+b

firstNode=None

prevNode=None


while summ!=0:

currNode = ListNode()

if firstNode is None:

firstNode = currNode


divRemain=summ % 10

# result.append(divRemain)

currNode.val = divRemain

if prevNode is not None:

prevNode.next = currNode


summ=(summ-divRemain) // 10


prevNode=currNode


if firstNode is None:

return ListNode(0)

else:

return firstNode




Пояснение:


Вначале из однонаправленных списков извлекаются хранимые в них числа a и b. Для извлечения каждый разряд умножается на соответсвующий десятичный множитель и складывается с аккумулирующим значением.


Значения складываются, и из полученной суммы формируется итоговый список. Формирование списка идет с младшего разряда к старшему. Число делится на 10, запоминается остаток от деления - это будет самый младший разряд. Сумма уменьшается в десять раз с отбрасыванием остатка от деления. Процесс повторяется пока разрядов не останется.


 
MyTetra Share v.0.59
Яндекс индекс цитирования