本文收錄了leetcode熱題中的一些數學類題目
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。
如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
示例:輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
def
addtwonumbers
(self, l1, l2)
:# 定義乙個進製標誌
a,b,p,carry = l1,l2,
none,0
while a or b:
# a和b節點的值相加,如果有進製還要加上進製的值
val =
(a.val if a else0)
+(b.val if b else0)
+carry
# 根據val判斷是否有進製,不管有沒有進製,val都應該小於10
carry, val = val//
10, val%
10 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
# 根據a和b是否為空,p指標也前進一位
p.next
= a if a else b
# 迴圈結束carry>0說明有進製
if carry:
p.next
= listnode(1)
# 每次迭代實際上都是將val賦給a指標的,所以最後返回的是l1
return l1
思路:定義a,b指標分別指向l1,l2,用來遍歷鍊錶;定義p指標用來修改節點值(在l1的基礎上修改);定義變數carry計算進製,每次迴圈先計算修正後的節點值和進製,再使指標前進,兩個鍊錶均遍歷完畢則迴圈結束
時間複雜度:o(n),n=max(n1,n2),n1,n2分別為兩條鍊錶的長度
空間複雜度:o(1),直接在原煉表上修改,最多申請了最後一位進製的空間
LeetCode刷題總結
123 4567 891011 12 元素交換 swap a 1 a 3 sort排序 sort a.begin a.end 陣列顛倒 reverse a.begin a.end 陣列元素置為0 memset a,0,a.size 陣列取值 a.push back 定義二維陣列 vector vec...
LeetCode刷題總結
123 4567 891011 12 元素交換 swap a 1 a 3 sort排序 sort a.begin a.end 陣列顛倒 reverse a.begin a.end 陣列元素置為0 memset a,0,a.size 陣列取值 a.push back 定義二維陣列 vector vec...
leetcode刷題總結 6 10題
六 zigzag conversion 本題屬於比較簡單的,很容易就能總結出規律。乙個zigzag數以2 numrows 2為乙個迴圈,每乙個豎行的字母下標為乙個cycle,除了第一行和最後一行,中間各行都要加乙個j cycle 2 i i為從零開始的行號,j為每個迴圈裡i cycle n.clas...