LeetCode 2 兩數相加

2021-10-02 19:58:16 字數 2234 閱讀 9656

題目描述

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

如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。

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

示例:輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

輸出:7 -> 0 -> 8

原因:342 + 465 = 807

解法一:python

把鍊錶轉化為數字進行求和後在返回成煉表,當然這道題有些處心積慮的是如果用c/c++這個方法就不得行,因為其中有測試樣例超出了int的長度,但是對python來說可以全然不顧。當然這個方法也是最為簡便的方法,既不用考慮進製,也不用擔心兩數字長度不一要補0.

# definition for singly-linked list.

# class listnode:

# def __init__(self, x):

# self.val = x

# self.next = none

class

solution

:def

addtwonumbers

(self, l1: listnode, l2: listnode)

-> listnode:

defget_num

(l):

ifnot l:

return

0return l.val + get_num(l.

next)*

10def

make_list

(n):

if n ==0:

return

none

l = listnode(n%10)

l.next

= make_list(n//10)

return l

s = get_num(l1)

+ get_num(l2)

if s ==0:

return l1

return make_list(s)

注意,在python中," / 「就表示 浮點數除法,返回浮點結果;」 // "表示整數除法。

解法二:c++ 利用鍊錶,原理同大數加法

偽**如下:

請注意,我們使用啞結點來簡化**。如果沒有啞結點,則必須編寫額外的條件語句來初始化表頭的值

請特別注意以下情況:

l1=[0,1],l2=[0,1,2] 當乙個列表比另乙個列表長時

l1=,l2=[0,1] 當乙個列表為空時,即出現空列表

l1=[9,9],l2=[1] 求和運算最後可能出現額外的進製,這一點很容易被遺忘

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

if(carry>

0) curr-

>next =

newlistnode

(carry)

;return dummyhead.next;}}

;

複雜度分析

時間複雜度:o

(max⁡(

m,n)

)o(\max(m, n))

o(max(m,

n)),假設 m

mm 和 n

nn 分別表示 l1l1

l1和 l2l2

l2的長度,上面的演算法最多重複 max⁡(

m,n)

\max(m, n)

max(m,

n)次。空間複雜度:o

(max⁡(

m,n)

)o(\max(m, n))

o(max(m,

n)), 新列表的長度最多為max⁡(

m,n)

+1

\max(m,n) + 1

max(m,

n)+1

。這裡補充說明幾個知識:

" ->" 和 「.」 的區別:前者是指標,後者是結構體

null和nullptr的區別:參見c++中nullptr

LeetCode2 兩數相加

嗯。今天兩個簡單題,我可能要墮落了 先貼第乙個 給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8原因 342 465 807...

LeetCode 2 兩數相加

題目 給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 原因 342 465 807 解題 這題就比較簡單了,兩數相加處理好...

LeetCode 2 兩數相加

題目描述 給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。題目思路 先從最低有效位也就是列表 l1 和 l2 的表頭開始相加。由於每位數字都應當處於 0 9 的範圍內,我們計算...