leetcode刷題筆記 06 兩數相加

2021-09-29 16:39:56 字數 1560 閱讀 2428

給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。

如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。

您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。

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

輸出:7 -> 0 -> 8

原因:342 + 465 = 807

1.我們不斷的遍歷兩個鍊錶,每次遍歷都將鍊錶a和鍊錶b的值相加,再賦給鍊錶a。如果有進製我們還需要記錄乙個進製標誌。

2.迴圈的條件是鍊錶a不為空或者鍊錶b不為空,這樣當整個迴圈結束時,鍊錶就被串起來了。

3.當迴圈結束時,如果進製標誌》0還需要處理下邊界條件。

4.我們不用生成乙個新的節點,直接將兩個節點相加的值賦給節點a就可以了,這樣只用改變節點的內容,速度會更快一些。

最終返回 l1 即可。

# definition for singly-linked list.

# class listnode:

# def __init__(self, x):

# self.val = x

# self.next = none

class

solution

:def

addtwonumbers

(self, l1: listnode, l2: listnode)

-> listnode:

#a,b分別指向鍊錶ll,l2,p為總指標,即鏈結求和後的值的指標,carry為進製標誌

a,b,p,carry = l1,l2,

none,0

while a or b:

#val的值為倆鍊錶值相加加上進製標誌

val =

(a.val if a else0)

+(b.val if b else0)

+carry

#加完後更新carry標誌和val真實值,因為其值範圍為0-9

carry,val =

1if val>=

10else

0,val%

10#把p指標指向a,並且覆蓋l1鍊錶中的值

p,p.val = a if a else b,val

#a,b指標後移

a,b = a.

next

if a else

none

,b.next

if b else

none

#p的指標也隨之後移指向後一位

p.next

= a if a else b

#如果最後一位算完之後仍有進製,則把1新增到鍊錶尾部

if carry:

p.next

= listnode(carry)

return l1

執行用時 :76 ms, 在所有 python3 提交中擊敗了94.21% 的使用者

記憶體消耗 :13.9 mb, 在所有 python3 提交中擊敗了5.06%的使用者

LeetCode刷題筆記 兩數相加

給你兩個 非空 的鍊錶,表示兩個非負的整數。它們每位數字都是按照 逆序 的方式儲存的,並且每個節點只能儲存 一位 數字。請你將兩個數相加,並以相同形式返回乙個表示和的鍊錶。你可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 1 輸入 l1 2,4,3 l2 5,6,4 輸出 7,0,8 ...

LeetCode刷題筆記 兩數之和

題目描述 兩數之和 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nu...

Leetcode刷題筆記

1.兩數之和給定乙個整數陣列nums 和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。ps 你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。思路 用target減去nums中的每乙個數,並設立乙個字典來記錄對應的下標 class...