日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Leetcode:0002(两数之和)

發布時間:2023/11/29 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode:0002(两数之和) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

LeetCode:0002(兩數之和)

題目描述:給定兩個非空鏈表來表示兩個非負整數。位數按照逆序方式存儲,它們的每個節點只存儲單個數字。將兩數相加返回一個新的鏈表。
你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。
示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807

算法思路

思路


算法
??就像你在紙上計算兩個數字的和那樣,我們首先從最低有效位也就是列表 的表頭開始相加。由于每位數字都應當處于 的范圍內,我們計算兩個數字的和時可能會出現“溢出”。例如,5 + 7 = 125+7=12。在這種情況下,我們會將當前位的數值設置為 2,并將進位 帶入下一次迭代。進位carry必定是0或1,這是因為兩個數字相加(考慮到進位)可能出現的最大和為 9 + 9 + 1 = 19。

?

偽代碼如下:

  • 將當前結點初始化為返回列表的啞結點。
  • 將進位 carry初始化為0。
  • 將p和q分別初始化為列表的頭部。
  • 遍歷列表直至到達它們的尾端。
    • 將x設為結點p的值。如果p已經到達$l1$的末尾,則將其值設置為0。
    • 將y設為結點q的值。如果q已經到達l2的末尾,則將其值設置為0。
    • 設定 $sum = x + y + carry$。
    • 更新進位的值,$carry = sum / 10$。
    • 創建一個數值為 (sum mod 10) 的新結點,并將其設置為當前結點的下一個結點,然后將當前結點前進到下一個結點。
    • 同時,將p和q前進到下一個結點。
    • 檢查$carry = 1$是否成立,如果成立,則向返回列表追加一個含有數字$11$的新結點。
      返回啞結點的下一個結點。
      解法
1/**
2?*?Definition?for?singly-linked?list.
3?*?struct?ListNode?{
4?*?????int?val;
5?*?????ListNode?*next;
6?*?????ListNode(int?x)?:?val(x),?next(NULL)?{}
7?*?};
8?*/

9class?Solution?{
10public:
11????ListNode*?addTwoNumbers(ListNode*?l1,?ListNode*?l2)?{
12????????ListNode?*dummyHead?=?new?ListNode(0);
13????????ListNode?*cur?=?dummyHead;
14????????int?carry?=?0;??????????????????????????????//進位用
15????????while(l1?!=?NULL?||?l2?!=?NULL){
16????????????int?x?=?(l1?!=?NULL)???l1?->?val?:0;
17????????????int?y?=?(?l2?!=?NULL)???l2?->?val?:?0;
18????????????int?sum?=?carry?+?x?+?y;
19????????????carry?=?sum?/?10;?????????????????????????//進位
20????????????cur?->?next?=?new?ListNode(sum?%?10);?????//指向下一節點
21????????????cur?=?cur?->?next;
22????????????if(l1?!=?NULL)
23????????????????l1?=?l1->next;
24????????????if(l2?!=?NULL)
25????????????????l2?=?l2->next;
26????????}
27????????if(carry>0)
28????????????cur->next?=?new?ListNode(carry);????//加上進位
29????????return?dummyHead->next;
30????}
31};

轉載于:https://www.cnblogs.com/ywx123/p/9971567.html

總結

以上是生活随笔為你收集整理的Leetcode:0002(两数之和)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。