LeetCode 兩數相加

2021-09-02 20:37:34 字數 1477 閱讀 7834

題目:給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭

示例:輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

輸出:7 -> 0 -> 8

原因:342 + 465 = 807

class

solution

:def

addtwonumbers

(self, l1, l2)

:"""

:type l1: listnode

:type l2: listnode

:rtype: listnode

"""re = listnode(0)

r=re

carry=

0while

(l1 or l2)

: x= l1.val if l1 else

0 y= l2.val if l2 else

0 s=carry+x+y

carry=s//

10 r.

next

=listnode(s%10)

r=r.

next

if(l1!=

none

):l1=l1.

next

if(l2!=

none

):l2=l2.

next

if(carry>0)

: r.

next

=listnode(1)

return re.

next

從最低位開始相加,由於每可能會出現「溢位」,於是引入進製 carry

1.將當前結點初始化為返回列表的啞結點,將第一次迭代時的進製 carry 初始化為 0

2.檢查l1和l2,當有乙個非空時進入迴圈,並遍歷列表 l1和 l2 直至到達它們的尾端

3.當l1非空時將 x設為l1的頭結點值。當x遍歷到達 l1 的末尾,則將其值設定為0。當l2非空時將 y設為l2頭結點的值。當y 遍歷到達 l2的末尾,則將其值設定為 0

4.設sum = x + y + carry

則新進製的值:carry = sum // 10

建立乙個數值為 (sum %10)的新結點,並將其設定為當前結點的下乙個結點,然後將當前結點前進到下乙個(新設定)結點

5.繼續判斷迴圈條件,若滿足,則將x,y分別前進到l1和l2下一結點

1.考慮兩個相加列表長度可能不同,將迴圈條件設為l1或l2仍未空

2.python3中取整符號為: / /

o (max(m,n)) m,n分別為l1和l2的長度

LeetCode 兩數相加

題目來自leetcode 注意幾點 鍊錶對應結點相加時增加前乙個結點的進製,並儲存下乙個結點的進製 兩個鍊錶長度不一致時,要處理較長鍊錶剩餘的高位和進製計算的值 如果最高位計算時還產生進製,則還需要新增乙個額外結點。definition for singly linked list.struct l...

leetcode 兩數相加

給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭.示例 輸入 2 4 3 5 6 4 輸出 7 0 8 原因 342 465 807 definition for singly ...

leetcode 兩數相加

給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8原因 342 465 807 definition for singly l...