給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。
如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 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...