LeetCode刷題之路 兩數相加

2021-10-14 01:54:10 字數 2459 閱讀 6412

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

請你將兩個數相加,並以相同形式返回乙個表示和的鍊錶。

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

示例 1:

輸入:l1 = [2,4,3], l2 = [5,6,4]

輸出:[7,0,8]

解釋:342 + 465 = 807.

示例 2:

輸入:l1 = [0], l2 = [0]

輸出:[0]

示例 3:

輸入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]

輸出:[8,9,9,9,0,0,0,1]

每個鍊錶中的節點數在範圍 [1, 100] 內

0 <= node.val <= 9

題目資料保證列表表示的數字不含前導零

#最直觀的思路

定義zero存放數字0,為了預防l1或l2的next為none

jinw為進製標誌

result存放每次得到的結果

最初先判斷若 cur1的值為0 且 cur1.next為none的話 證明cur1是空的(數字0)

則直接返回l2

同理判斷l2是否為空

當l1和l2都不為空時,

則先計算l1、l2、jinw的和,若和大於等於10,則將進製標誌變為1,同時將和-10,

只取差值就行。隨後儲存起來差值,並且取cur1和l2的下乙個節點。

若節點為none,則用zero來代替。

當兩個鍊錶都遍歷完後,我們直接將結果從新賦值給l1即可。

缺點:比較耗時

class solution:

def addtwonumbers(self, l1: listnode, l2: listnode) -> listnode:

zero = listnode(0)

jinw = 0

result =

cur1 = l1

# print(l1)

if cur1.val == 0 and cur1.next == none:

return l2

elif l2.val == 0 and l2.next == none:

return l1

else:

while cur1 != none or l2 != none:

a = cur1.val + l2.val + jinw

jinw = 0

if a >= 10:

jinw = 1

a -= 10

cur1 =

(cur1.next != none and cur1.next or zero)

l2 =

(l2.next != none and l2.next or zero)

if cur1 == zero and l2 == zero:

if jinw == 1:

break

cur1 = l1

# print (cur1)

# print(result)

# print(l1)

for i in range(len(result)):

cur1.val = result[i]

if cur1.next == none and i != len(result) -1:

cur1.next = listnode(

) cur1 = cur1.next

print(l1)

return l1

# print (q)

#改進的思路

大致思路是一樣的。只是在最初的時候定義乙個新的鍊錶l3直接用來儲存運算結果。

class solution:

def addtwonumbers(self, l1: listnode, l2: listnode) -> listnode:

jinw = 0

l3 = listnode(0)

cur3 = l3

while l1 or l2:

a = l1.val if l1 else 0

b = l2.val if l2 else 0

c = a + b + jinw

jinw = 0

if c >= 10:

jinw = 1

c -= 10

l3.next = listnode(c)

print (l3.val)

l3 = l3.next

l1 = l1.next if l1 else none

l2 = l2.next if l2 else none

if jinw:

l3.next = listnode(1)

return cur3.next

LeetCode刷題之路 2 兩數相加

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

LeetCode刷題之路 1 兩數之和

最近要開始刷題了,打算每天要刷一兩道演算法題,對於一些難的演算法知識點要及時搞懂 然後按時參加leetcode的周賽和雙周賽。立此部落格為證,作為監督。給定乙個整數陣列 nums 和乙個整數目標值 target,請你在該陣列中找出 和為目標值 的那 兩個 整數,並返回它們的陣列下標。你可以假設每種輸...

leetcode刷題之路29 兩數相除

給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法 除法和 mod 運算子。返回被除數 dividend 除以除數 divisor 得到的商。示例 1 輸入 dividend 10,divisor 3 輸出 3 示例 2 輸入 dividend 7,divis...