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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

leetCode刷题-第二题两数之和

發布時間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetCode刷题-第二题两数之和 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

兩數之和

題目連接:

題目鏈接
給你兩個 非空 的鏈表,表示兩個非負的整數。它們每位數字都是按照 逆序 的方式存儲的,并且每個節點只能存儲 一位 數字。

請你將兩個數相加,并以相同形式返回一個表示和的鏈表。

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

示例 1:

輸入:l1 = [2,4,3], l2 = [5,6,4]
輸出:[7,0,8]
解釋:342 + 465 = 807.
示例 2:

輸入:l1 = [0], l2 = [0]
輸出:[0]
示例 3:

輸入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
輸出:[8,9,9,9,0,0,0,1]

提示:

每個鏈表中的節點數在范圍 [1, 100] 內
0 <= Node.val <= 9
題目數據保證列表表示的數字不含前導零
通過次數734,192提交次數1,851,300

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/add-two-numbers
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

題目解析

題目中說的是兩個鏈表都是逆序的,也就是整數的高位在鏈表的底部存儲著,那么只需要記錄如下信息,兩個鏈表對應位數想加,進位保留,進位和會放到下次鏈表求sum的時候一起使用,若是兩個鏈表都結束進位非空則在申請一個node節點放到返回鏈表的末尾并把對應值放到末尾鏈表上

go語言實現:

/*** Definition for singly-linked list.* type ListNode struct {* Val int* Next *ListNode* }*/ func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {listNode := new(ListNode)listNode.Val = l1.Val + l2.Vall1 = l1.Nextl2 = l2.Nextl3 := listNodex := l3.Val / 10l3.Val = l3.Val % 10for {if l1 == nil && l2 == nil {if x != 0 {l3.Next = new(ListNode)l3.Next.Val = x}break}l3.Next = new(ListNode)l3.Next.Val += xif l1 != nil {l3.Next.Val += l1.Vall1 = l1.Next}if l2 != nil {l3.Next.Val += l2.Vall2 = l2.Next}x = l3.Next.Val / 10l3.Next.Val = l3.Next.Val % 10l3 = l3.Next}return listNode }


C++代碼實現

// // Created by andrew on 2021/3/7. //#include <iostream>using namespace std;struct ListNode {int val;ListNode *next;ListNode() : val(0), next(nullptr) {}explicit ListNode(int x) : val(x), next(nullptr) {}ListNode(int x, ListNode *next) : val(x), next(next) {} };class Solution { public:static ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {ListNode *head = nullptr, *tail = nullptr;int carry = 0;while (l1 || l2) {int n1 = l1 ? l1->val : 0;int n2 = l2 ? l2->val : 0;int sum = n1 + n2 + carry;if (!head) {head = tail = new ListNode(sum % 10);} else {tail->next = new ListNode(sum % 10);tail = tail->next;}carry = sum / 10;if(l1) {l1 = l1->next;}if(l2) {l2 = l2->next;}}if(carry > 0) {tail->next = new ListNode(carry);}return head;}};int main(int argc, char *argv[]) {ListNode * l1 = nullptr;ListNode * l2 = nullptr;l1 = new ListNode(2);l1->next = new ListNode(4);l1->next->next = new ListNode(3);l2 = new ListNode(5);l2->next = new ListNode(6);l2->next->next = new ListNode(4);ListNode * head = nullptr;head = Solution::addTwoNumbers(l1, l2);while (nullptr != head) {cout << head->val << endl;head = head->next;}return 0; }

總結

以上是生活随笔為你收集整理的leetCode刷题-第二题两数之和的全部內容,希望文章能夠幫你解決所遇到的問題。

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