1.題目描述 445. 兩數相加 ii
給你兩個 非空 鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存一位數字。將這兩數相加會返回乙個新的鍊錶。
你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。
高階:如果輸入鍊錶不能修改該如何處理?換句話說,你不能對列表中的節點進行翻轉。
示例:輸入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 8 -> 0 -> 7
2.思路分析
2.1 整體這個問題比較簡答,實際上就是翻轉鍊錶,按照算數邏輯進製即可,翻轉鍊錶用遞迴做思路簡單直接,不容易出錯
2.2 高階要求不能修改輸入鍊錶,兩個思路吧,乙個是我直接拷貝唄,然後執行上述邏輯;另乙個是我讀取構成字串,轉為int,然後加起來之後根據結果構造成煉表返回即可。
3.debug記錄
3.1 本來定義的翻轉鍊錶同時返回鍊錶長度的,結果後來編碼過程中又給忘記了
3.2 本來對於最後進製的情況構造了節點,但是忘了加到原有的節點上去了
如何避免來盡可能達到bugfree呢?
1)如果有任何思路和操作有點特殊,不是非常簡單,都要備註記下來,以防忘記
2)最後寫完之後進行細緻的**review,把一些明顯的錯誤點避免掉,而且可以查缺補漏,將特殊注意的地方都縷一遍
3)樹立前條件,中間不變數,後條件的邊界校驗和斷言程式設計習慣
4.提交成績
執行用時 :76 ms, 在所有 python 提交中擊敗了30.53%的使用者
記憶體消耗 :12.9 mb, 在所有 python 提交中擊敗了33.33%的使用者
5.ac**(python):
# definition for singly-linked list.
# class listnode(object):
# def __init__(self, x):
# self.val = x
# self.next = none
class solution(object):
def reverselist(self, l1):
fist_node = l1
mlen = 0
if l1.next:
fist_node, mlen = self.reverselist(l1.next)
l1.next.next = l1
l1.next = none
return fist_node, mlen + 1
def addtwonumbers(self, l1, l2):
""":type l1: listnode
:type l2: listnode
:rtype: listnode
不考慮高階情況,思路比較簡單直接,就是先翻轉鍊錶,這樣就可以從個位開始
將較長的可以作為累加和一方,最後將該鍊錶翻轉返回根節點即可
"""l1, l1_len = self.reverselist(l1)
l2, l2_len = self.reverselist(l2)
result_list = l1
other = l2
if l1_len < l2_len:
result_list = l2
other = l1
result_cur_node = result_list
other_cur_node = other
jinwei = 0
last_node = none
while result_cur_node or jinwei > 0:
new_value = jinwei
if not result_cur_node:
result_cur_node = listnode(jinwei)
last_node.next = result_cur_node
else:
new_value += result_cur_node.val
if other_cur_node:
new_value += other_cur_node.val
other_cur_node = other_cur_node.next
result_cur_node.val = new_value % 10
jinwei = new_value // 10
if not result_cur_node.next:
last_node = result_cur_node
result_cur_node = result_cur_node.next
return self.reverselist(result_list)[0]
兩數相加 II
給定兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。高階 如果輸入鍊錶不能修改該如何處理?換句話說,你不能對列表中的節點進行翻轉。示例 輸入 7 2 4 3 5 6 4 ...
兩數相加 II
1.問題描述 給定兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。高階 如果輸入鍊錶不能修改該如何處理?換句話說,你不能對列表中的節點進行翻轉。示例 輸入 7 2 4 3...
445 兩數相加 II
這種題的用例是一定會搞一些很大的數的。long都會溢位,所以我們就不用嘗試轉數字做加法轉鍊錶的方法了。另外直接倒置兩個鍊錶再做加法的做法會改變原鍊錶,題幹也說了禁止改動原鍊錶。1.求兩個鍊錶長度,如果一長一短,把短的前面加若干個0節點,使得兩個鍊錶長度相同。之後對於就遞迴連線鍊錶。dfs函式引數為前...