day03 445 兩數相加 II 中等

2021-10-05 00:00:00 字數 2379 閱讀 6669

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函式引數為前...