給你兩個 非空 的鍊錶,表示兩個非負的整數。它們每位數字都是按照 逆序 的方式儲存的,並且每個節點只能儲存 一位 數字。
請你將兩個數相加,並以相同形式返回乙個表示和的鍊錶。
你可以假設除了數字 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...