leetcode 兩數加和

2021-10-03 18:01:20 字數 2662 閱讀 5153

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

如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。

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

輸出:7 -> 0 -> 8

原因:342 + 465 = 807

思路並不難,這種演算法其實就跟剛開始學數學加法時候列式子計算一樣,只要足夠仔細,把所有可能想清楚即可。

最開始的提交**為:

class

solution

(object):

defaddtwonumbers

(self, l1, l2)

:"""

:type l1: listnode

:type l2: listnode

:rtype: listnode

"""

newnode=listnode(

0)

ansnode=newnode

b=0while l1 and l2:

a=l1.val+l2.val+b

if a>

9:

ansnode.

next

=listnode(a%

10)

b=1else

:

ansnode.

next

=listnode(a)

b=0

l1=l1.

next

l2=l2.

next

ansnode=ansnode.

next

while l1:

if l1.val+b==

10:

ansnode.

next

=listnode(

0)

b=1else

:

ansnode.

next

=listnode(b+l1.val)

b=0

l1=l1.

next

ansnode=ansnode.

next

while l2:

if l2.val+b==

10:

ansnode.

next

=listnode(

0)

b=1else

:

ansnode.

next

=listnode(b+l2.val)

b=0

l2=l2.

next

ansnode=ansnode.

next

if b>

0:

ansnode.

next

=listnode(b)

return newnode.

next

這樣寫效率太低,最明顯的缺點就是迴圈、判斷太多了。那進一步簡化:

class

solution

:def

addtwonumbers

(self, l1: listnode, l2: listnode)

-> listnode:

newnode=listnode(

0)

l3=newnode

s=b=

0while l1 or l2 or b:

d=b+

(l1.val if l1 else0)

+(l2.val if l2 else

0)

l3.next

=listnode(d if d<

9else d%

10)

b=d//

10

l1=l1.

next

if l1 else

none

l2=l2.

next

if l2 else

none

l3=l3.

next

if b==

1:

l3=listnode(1)

return newnode.

next

盡可能的在乙個迴圈內一次性判斷完。

兩數之和,兩數相加 leetcode

1.兩數之和,在 leetcode 裡面是屬於 easy 級別的。我們看看他的題目和解法。題目 給定乙個整數陣列nums和乙個目標值target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。例子 給...

LeetCode 兩數之和

基礎不好,筆試 題沒做好,校招沒offer,趕緊來刷題 這裡採用兩種方法來做,比較效能。nums i for i in range 1,100000000 target 3 class solution object deftwosum self,nums,target if len nums 1 ...

LeetCode 兩數相加

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