每日一題(LeetCode)----鏈表--兩數相加

每日一題(LeetCode)----鏈表–兩數相加

1.題目(2. 兩數相加)

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

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

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

    示例 1:

    img

    輸入: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
    • 題目數據保證列表表示的數字不含前導零

2.解題思路

思路一

循環

1.先獲取兩個鏈表的長度,然后把較長鏈表作為我們的結果鏈表 2.創建一個記錄進位的變量,用兩個指針從頭開始遍歷兩個鏈表每次遍歷到的節點如果非空,那么把當前節點中的值和當前進位進行相加,如果和大于10,那么下一次的進位變為1,然后和減10,存到結果鏈表的對應節點中,一直遍歷直到遍歷完較長鏈表時結束,(為了之后我們添加新節點,所以遍歷到較長鏈表的結尾時,我們用tail指針保存一下較長鏈表的結尾) 3.然后我們查看當前進位是否為0,如果不為零,那我們新創建一個節點,接到結果鏈表的后面操作結束,如果為零,那么不需要新創建一個節點,操作結束 4.返回新鏈表的頭節點

思路二:遞歸

遞歸解法非常巧妙。

做遞歸題目一定要牢記「遞歸函數的定義」。

遞歸函數定義:addTwoNumbers 表示將兩個鏈表 l1 和 l2 相加得到的新鏈表; 遞歸終止條件:如果 l1 和 l2 有一個為空,則返回另外一個。 遞歸函數內容:

把兩個鏈表節點的值相加(結果記為 add )。把 add 模 10 作為當前的鏈表節點的值。
把兩個鏈表的 next 節點相加。(注意:如果當前相加的結果 add>=10,需要把 next 節點相加得到的結果 + 1。)
遞歸解法妙在天然地處理好了兩個鏈表不一樣長、最終相加結果有進位的情況。

原作者:負雪明燭
鏈接:https://leetcode.cn/problems/add-two-numbers/

自己的理解:就是先從前到后先走一遍,算出所有的和作為答案,然后從后往前看有哪個和超過了10,超過了10就繼續向后遞歸,但是遞歸的對象變為當前進位和它的下一位和,到了遞歸的終止條件之后,就繼續向前返回

3.寫出代碼

思路一的代碼
class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {//先獲取兩個鏈表的長度int length1=0;int length2=0;ListNode* Temp1=l1;ListNode* Temp2=l2;int length=0;while(Temp1){length1++;Temp1=Temp1->next;}while(Temp2){length2++;Temp2=Temp2->next;}//判斷那個鏈表長作為我們的結果鏈表ListNode* res1=nullptr;ListNode* res2=nullptr;if(length1>=length2){length=length1;res1=l1;res2=l2;}else{length=length2;res1=l2;res2=l1;}Temp1=res1;Temp2=res2;int carry=0;//記錄進位的變量ListNode* Temp3=nullptr;//存的是較長鏈表的最后一個節點//兩個鏈表對應的節點進行相加while(length--){int sum=0;if(Temp1&&Temp2){sum=Temp1->val+Temp2->val+carry;}else{sum=Temp1->val+carry;}carry=0;if(sum>=10){carry++;sum=sum-10;Temp1->val=sum;}else{Temp1->val=sum;}if(Temp1->next==nullptr){Temp3=Temp1;}Temp1=Temp1->next;if(Temp2){Temp2=Temp2->next;}}if(carry>0){ListNode* node=new ListNode(carry);Temp3->next=node;}return res1;}
};
思路二的代碼
class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {if (!l1) return l2;if (!l2) return l1;int target = l1->val + l2->val;ListNode* res = new ListNode(target % 10);res->next = addTwoNumbers(l1->next, l2->next);if (target >= 10){res->next = addTwoNumbers(res->next, new ListNode(1));}delete l1, l2;return res;}
};
原作者:負雪明燭
鏈接:https://leetcode.cn/problems/add-two-numbers/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165453.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165453.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165453.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入ReentrantReadWriteLock(一)

一、為什么要出現讀寫鎖 synchronized和ReentrantLock都是互斥鎖。 如果說有一個操作是讀多寫少的&#xff0c;還要保證線程安全的話。如果采用上述的兩種互斥鎖&#xff0c;效率方面很定是很低的。 在這種情況下&#xff0c;咱們就可以使用ReentrantReadWriteLock讀寫鎖去實現…

React16中打印事件對象取不到值的現象及其原因分析

React16中打印事件對象取不到值的現象及其原因分析 一、背景 在最近的開發過程中&#xff0c;遇到了一個看起來匪夷所思的問題?&#xff1a; <Inputplaceholder"請輸入"onChange{(e) > {console.log(e:, e)}}onKeyDown{handleKeyDown} />此時按理來說我…

旅行商問題(枚舉,回溯,動態規劃,貪心,分支界限)

文章目錄 問題描述暴力枚舉回溯法動態規劃法貪心法分支界限法 問題描述 假設有一個貨郎擔要拜訪n個城市&#xff0c;他必須選擇所要走的路程&#xff0c;路程的限制時每個城市只能拜訪一次&#xff0c;而且最后要走到原來出發的城市&#xff0c;要求路徑長度。 旅行商問題將要…

為銷售賦能:利用 Splashtop 增強遠程培訓技術

遠程銷售團隊這一概念在當今快節奏的商業環境中日益普遍。各公司正在計劃在不同地點靈活開展銷售業務&#xff0c;希望利用技術優勢縮小地域差距。但是&#xff0c;這種向遠程銷售的轉型面臨著重大挑戰&#xff0c;尤其在培訓和發展領域。培訓遠程銷售團隊需要采用創新方法&…

常見樹種(貴州省):012茶、花椒、八角、肉桂、杜仲、厚樸、枸杞、忍冬

摘要&#xff1a;本專欄樹種介紹圖片來源于PPBC中國植物圖像庫&#xff08;下附網址&#xff09;&#xff0c;本文整理僅做交流學習使用&#xff0c;同時便于查找&#xff0c;如有侵權請聯系刪除。 圖片網址&#xff1a;PPBC中國植物圖像庫——最大的植物分類圖片庫 一、茶 灌…

鴻蒙 ark ui 輪播圖實現教程

前言&#xff1a; 各位同學有段時間沒有見面 因為一直很忙所以就沒有去更新博客。最近有在學習這個鴻蒙的ark ui開發 因為鴻蒙不是發布了一個鴻蒙next的測試版本 明年會啟動純血鴻蒙應用 所以我就想提前給大家寫一些博客文章 效果圖 具體實現 我們在鴻蒙的ark ui 里面列表使…

土地利用數據技術服務

一、背景介紹 土地是人類賴以生存與發展的重要資源和物質保障&#xff0c;在“人口&#xff0d;資源&#xff0d;環境&#xff0d;發展&#xff08;PRED&#xff09;”復合系統 中&#xff0c;土地資源處于基礎地位。隨著現代社會人口的不斷增長以及工業化、城市化進程的加速&a…

Excel使用VLOOKUP查詢數據

VLOOKUP函數在百度百科中的解釋是&#xff1a; 解釋一下&#xff0c;函數需要4個參數&#xff1a; 參數1&#xff08;lookup_value&#xff09;&#xff1a;需要匹配的值參數2&#xff08;table_array&#xff09;&#xff1a;在哪個區域里進行匹配參數3&#xff08;col_index…

Dubbo3使用Zookeeper作為注冊中心的方案討論!詳解DubboAdmin與PrettyZoo來監控服務的優劣!

文章目錄 一&#xff1a;Dubbo注冊中心的基本使用 二&#xff1a;Zookeeper注冊中心的使用 1&#xff1a;依賴引入 2&#xff1a;實際開發 三&#xff1a;Zookeeper作為注冊中心的使用展示 1&#xff1a;啟動注冊Zookeeper服務 2&#xff1a;引入注冊中心 (一)&#xf…

Java 21增強對Emoji表情符號的處理了

現一個 Java 21 中有意思的東西&#xff01; 在java.Lang.Character類中增加了用于確定字符是否為 Emoji 表情符號的 API&#xff0c;主要包含下面六個新的靜態方法&#xff1a; public static boolean isEmoji(int codePoint) {return CharacterData.of(codePoint).isEmoji(…

操作系統 day13(RR、優先級調度)

RR&#xff08;時間片輪轉&#xff09; 響應時間&#xff1a;系統中有10個進程正在并發執行&#xff0c;如果時間片為1秒&#xff0c;則一個進程被響應可能需要等待9秒。也就是說&#xff0c;如果用戶在自己進程的時間片外通過鍵盤發出調試命令&#xff0c;可能需要等待9秒才能…

中斷方式的數據接收

中斷接收簡介 回顧之前的代碼 之前的代碼是 等待標志位RXNE位為1才有數據 進而讀取數據存放在變量c中 再根據c變量的數據是為0還是為1進而編寫燈亮滅的代碼 if語句 但這樣的代碼明顯不符合裸機多任務的編程模型 因為在while中為進程 進程執行的時間不能大于5ms 但是while&…

Qt/QML編程學習之心得:一個Qt工程的學習筆記(九)

1、.pro文件 加CONFIG += c++11,才可以使用Lamda表達式(一般用于connect的內嵌槽函數) 2、QWidget 這是Qt新增加的一個類,基類,窗口類,QMainWindow和QDialog都繼承與它。 3、Main函數 QApplication a應用程序對象,有且僅有一個 a.exec() 進行消息循環、阻塞 MyWi…

《圖解Java數據結構與算法:微課視頻版》簡介

本書系統、全面地介紹數據結構的基礎理論與算法設計&#xff0c;精選數據結構考研習題和各類典型例題進行講解&#xff0c;案例和課后習題豐富&#xff0c;突出對數據結構算法實踐能力的培養。本書算法均采用Java語言實現&#xff0c;示例代碼可直接上機運行。 本書配套資源豐…

Spring-jdbcTemplate-配置數據庫連接池,配置文件方式beans.xml

1、jdbc.properties jdbc.drivercom.mysql.cj.jdbc.Driver jdbc.urljdbc:mysql:///studb jdbc.userroot jdbc.pwd123456 2、beans.xml <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans&…

Python BDD 框架比較之 pytest-bdd vs behave

pytest-bdd和behave是 Python 的兩個流行的 BDD 測試框架&#xff0c;兩者都可以用來編寫用戶故事和可執行的測試用例&#xff0c; 具體選擇哪一個則需要根據實際的項目狀況來看。 先簡單看一下兩者的功能&#xff1a; pytest-bdd 基于pytest測試框架&#xff0c;可以與pytest…

港口大型設備狀態監測及預測性維護策略

在現代港口運營中&#xff0c;大型設備的正常運行對于保障港口作業的高效性至關重要。為了實現設備的可靠性和持續性&#xff0c;港口管理者需要采取一系列狀態監測和預測性維護策略。 推進自動化和智能化是提高港口大型設備狀態監測和維護管理效率的重要途徑。通過應用先進的…

【計算機網絡筆記】數據鏈路層概述

系列文章目錄 什么是計算機網絡&#xff1f; 什么是網絡協議&#xff1f; 計算機網絡的結構 數據交換之電路交換 數據交換之報文交換和分組交換 分組交換 vs 電路交換 計算機網絡性能&#xff08;1&#xff09;——速率、帶寬、延遲 計算機網絡性能&#xff08;2&#xff09;…

讀像火箭科學家一樣思考筆記07_探月思維

1. 挑戰“不可能”的科學與企業 1.1. 互聯網 1.1.1. 和電網一樣具有革命性&#xff0c;一旦你插上電源&#xff0c;就能讓自己的生活充滿活力 1.1.2. 互聯網的接入可以幫助人們擺脫貧困&#xff0c;拯救生命 1.1.3. 互聯網還可以提供與天氣相關的信息 1.2. 用廉價、可靠的…

Windows如何截取屏幕圖片以及動態圖

在制作PPT或是其他演示文稿或是說明文檔的時候&#xff0c; 常常需要截取網頁或是屏幕的截圖&#xff0c;在Windows中有多種方式可以實現截取屏幕。 Windows 截取屏幕圖片的方式 在Windows 中截取屏幕中某個區塊的方式有&#xff1a; 方式1. 最原始的方式&#xff1a; 點擊 …