力扣日記 002兩數相加 鍊錶

2021-09-29 11:29:53 字數 1987 閱讀 7886

不說廢話,直接上**,思路是用乙個while迴圈和乙個加權數來獲得鍊錶中完整的數值,然後同理反向將最終結果轉化為鍊錶,唯一的問題是迴圈中不知道該怎樣儲存節點的值,於是放到了列表裡。

# definition for singly-linked list.

# class listnode:

# def __init__(self, x):

# self.val = x

# self.next = none

class

solution

:def

addtwonumbers

(self,l1,l2)

: ss=

0for i in

[l1,l2]

: n,

sum=0,

0while i:

#累加獲得兩個鍊錶的值

sum+= i.val *

10** n

i = i.

next

n +=

1 ss+=

sum n=

len(

str(ss))-

1 ls=

while n>=0:

print

(ss//

10**n)

p1=listnode(ss//

10**n)

ss%=

10**n

n-=1if

len(ls)

>=2:

p1.next

=ls[-2

]return ls[-1

]

執行用時:104ms;記憶體消耗:14.5mb,打敗了35%的使用者,基本也是個菜雞演算法,貼上來貢獻一下思路(不要臉)

參考了一下大佬的演算法,主要進行了**量的優化,在思路上沒什麼區別,然後把我不太會的建立鍊錶做了個優化。

class

solution

:def

addtwonumbers

(self, l1: listnode, l2: listnode)

-> listnode:

#累加獲得鍊錶的數字和

ss=0for i in

[l1,l2]

: n,

sum=0,

0while i:

sum+= i.val *

10** n

i = i.

next

n +=

1 ss+=

sum#翻轉由鍊錶生成的list

sum =

list

(str

(ss))[

::-1

]#構建兩個臨時節點,用於形成最終的鍊錶

tmp_node = listnode(

none

) node = listnode(

none

)for i in sum:

if tmp_node.val is

none

: tmp_node = listnode(i)

node = tmp_node

else

: tmp_node.

next

= listnode(i)

tmp_node = tmp_node.

next

return node

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

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

說實話我還是超喜歡用空間換時間的。

力扣 2鍊錶實現兩數相加

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

力扣兩數相加

描述 給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 definition for singl...

力扣 兩數相加

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