LeetCode 2 兩數相加

2021-08-25 22:14:14 字數 1966 閱讀 6137

本文章是對leetcode #2 兩數相加的經驗總結。

題目如下:

給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。

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

示例:

輸入:[2,4,3][5,6,4]

輸出:[7,0,8]

原因:342 + 465 = 807

/**

* definition for singly-linked list.

* struct listnode ;

*/typedef

struct listnode linklist;

struct listnode*

addtwonumbers

(struct listnode* l1,

struct listnode* l2)

else

pre->next =

null

; tmp = l1val + l2val + carry;

if(tmp >9)

pre->val = tmp;

if(l1->next ==

null

&& l2->next ==

null

)break;if

(l1->next !=

null

)else

l1val =0;

if(l2->next !=

null

)else

l2val =0;

}return l3;

}

題目輸入兩個單鏈表:l1l2,我的思路是從頭開始逐項相加,如果得到的和是兩位數,則將進製放入carry中。

這次嘗試的問題是:我設定了進製,但在判定逐項相加是否結束(即兩個鍊錶的下一項是否都為空)的時候直接退出迴圈,而沒有把進製再放上去,導致某些測試用例的輸出缺少了最後一位。

發覺上面提到的問題後,我把判定移到了檢查進製carry是否為0之後:如果,則判斷;如果不是,則跳過判斷。

/**

* definition for singly-linked list.

* struct listnode ;

*/typedef

struct listnode linklist;

struct listnode*

addtwonumbers

(struct listnode* l1,

struct listnode* l2)

else

pre->next =

null

; tmp = l1val + l2val + carry;

carry =0;

if(tmp >9)

pre->val = tmp;

if(carry ==0)

if(l1->next ==

null

&& l2->next ==

null

)break;if

(l1->next !=

null

)else

l1val =0;

if(l2->next !=

null

)else

l2val =0;

}return l3;

}

這次的**跑到了28ms,第二快,但是第二快的**是最多的。

提供一些測試用例:

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 的範圍內,我們計算...