Python解決-力扣002-兩數相加

兩數相加:鏈表表示的逆序整數求和

在這篇技術博客中,我們將討論一個力扣(LeetCode)上的編程題目:兩數相加。這個問題要求我們處理兩個非空鏈表,它們表示兩個非負整數。每個鏈表中的數字都是逆序存儲的,我們需要將這兩個整數相加,并以相同的形式返回一個表示和的鏈表。

題目描述

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

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

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

示例

示例 1:

輸入:l1 = , l2 =
輸出:
解釋:342 + 465 = 807.

示例 2:

輸入:l1 = , l2 =
輸出:

示例 3:

輸入:l1 = , l2 =
輸出:[8,9,9,9,

  • 每個鏈表中的節點數在范圍 [1, 100] 內
  • 0 <= Node.val <= 9
  • 題目數據保證列表表示的數字不含前導零

解題思路

為了解決這個問題,我們可以模擬整數加法的過程。首先,我們需要從兩個鏈表的頭節點開始,將它們的值相加,然后考慮進位。接下來,我們將兩個鏈表的指針向后移動,并重復這個過程,直到到達鏈表的尾部。如果在鏈表的尾部仍然有進位,我們需要添加一個新的節點來存儲這個進位。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:res = ListNode()     t = rest.val = (l1.val + l2.val) % 10temp = (l1.val + l2.val) // 10while l1.next or l2.next:t.next = ListNode()t = t.nextif l1.next and l2.next:l1 = l1.nextl2 = l2.nextt.val = (l1.val + l2.val + temp) % 10temp = (l1.val + l2.val + temp) // 10elif l1.next and not l2.next:l1 = l1.nextt.val = (l1.val + temp) % 10temp = (l1.val + temp) // 10elif l2.next and not l1.next:l2 = l2.nextt.val = (l2.val + temp) % 10temp = (temp + l2.val) // 10if temp:t.next = ListNode(temp)return res

代碼提煉簡化

關鍵的優化點,以及如何從原始代碼逐步轉換為優化后的代碼:

  1. 統一處理循環條件:原始代碼中,我們需要在循環內部分別處理 l1l2 的情況。優化后的代碼將這些條件合并到一個循環中,使得代碼更簡潔。我們使用 l1 or l2 or carry 作為循環條件,這樣可以確保在兩個鏈表都遍歷完且無進位時才退出循環。

  2. 簡化值獲取:在原始代碼中,我們需要在循環內部分別獲取 l1l2 的值。優化后的代碼通過使用 val1 = l1.val if l1 else 0val2 = l2.val if l2 else 0 來簡化值的獲取。這樣,我們可以在一行代碼中處理 l1l2 是否存在的情況,避免了額外的條件判斷。

  3. 簡化進位處理:原始代碼中,我們需要在循環內部分別計算和更新進位值。優化后的代碼將進位處理邏輯簡化為 carry = total // 10。這樣,我們可以在一行代碼中更新進位值,避免了額外的條件判斷。

  4. 簡化鏈表節點創建:原始代碼中,我們需要在循環內部分別創建新的鏈表節點。優化后的代碼通過使用 t.next = ListNode(total % 10) 來簡化鏈表節點的創建。這樣,我們可以在一行代碼中創建新的鏈表節點,避免了額外的條件判斷。

  5. 簡化鏈表遍歷:在原始代碼中,我們需要在循環內部分別更新 l1l2。優化后的代碼通過使用 l1 = l1.next if l1 else Nonel2 = l2.next if l2 else None 來簡化鏈表的遍歷。這樣,我們可以在一行代碼中處理 l1l2 是否存在的情況,避免了額外的條件判斷。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:res = ListNode()t = rescarry = 0while l1 or l2 or carry:if l1:val1 = l1.vall1 = l1.nextelse:val1 = 0if l2:val2 = l2.vall2 = l2.nextelse:val2 = 0total = val1 + val2 + carrycarry = total // 10t.next = ListNode(total % 10)t = t.nextreturn res.next

總結

這個問題是一個很好的鏈表操作練習,可以幫助我們熟悉鏈表的基本操作和加法運算的處理。

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

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

相關文章

Redis——String類型詳解

概述 Redis中的字符串直接按照二進制的數據存儲&#xff0c;不會有任何的編碼轉換&#xff0c;因此存放什么樣&#xff0c;取出來的時候就什么樣。而MySQL默認的字符集是拉丁文&#xff0c;如果插入中文就會失敗 Redis中的字符串類型不僅可以存放文本數據&#xff0c;還可以存…

通過Python爬蟲提升網站搜索排名

目錄 怎么使用Python爬蟲提升排名 1. 抓取競爭對手數據&#xff1a; 2. 關鍵詞研究&#xff1a; 3. 網頁內容優化&#xff1a; 4. 內部鏈接建設&#xff1a; 5. 外部鏈接建設&#xff1a; 6. 監測和調整&#xff1a; 需要注意哪些方面 1. 合法性和道德性&#xff1a; …

VB+SQL期刊信息管理系統設計與實現

摘 要 本次畢業設計課題為“期刊信息管理系統”,該系統在正常運營中總是面對大量的讀者信息、期刊信息以及兩者相互作用產生的借刊信息,還刊信息。因此需要對讀者資源、期刊資源、借刊信息、還刊信息進行管理,及時了解各個環節中信息的變更,有利于提高管理效率。 此次畢…

阿里三年功能測試的一些感悟

一、前言 功能測試是測試工程師的基礎功&#xff0c;很多人功能測試還做不好&#xff0c;就想去做性能測試、自動化測試。很多人對功能測試的理解就是點點點&#xff0c;如何自己不用心去悟&#xff0c;去研究&#xff0c;那么你的職業生涯也就停留在點點點上了。在這里&#…

Flv格式視頻怎么轉MP4?視頻格式轉換方法分享

FLV格式的視頻是一種早期的視頻格式&#xff0c;不支持更高的分辨率和比特率&#xff0c;這意味著視頻的清晰度和質量受限制&#xff0c;無法很好地保留細節和質量&#xff0c;這種格式的視頻已經逐漸被更高質量的視頻格式所替代&#xff0c;例如MP4格式&#xff0c;不僅具有很…

Java基礎(七)排序算法

排序 1. 冒泡排序 >> 冒泡排序的思想 冒泡排序是一種簡單的排序算法&#xff0c;其基本思想是通過多次遍歷待排序序列&#xff0c;依次比較相鄰的元素并交換位置&#xff0c;使得每次遍歷后最大&#xff08;或最小&#xff09;的元素冒泡到序列的末尾。具體步驟如下&a…

SpringBoot+Mybatis-Plus實現增刪改查超詳細步驟

目錄 一、介紹 二、前期準備工作 &#xff08;一&#xff09; 創建springboot項目和創建數據庫 三、項目配置 &#xff08;一&#xff09;pom.xl導入相關依賴 1.導入依賴 &#xff08;二&#xff09;yml文件中配置連接數據庫 2.配置yml文件 四、代碼的編寫 數據庫展…

推斷統計(配對樣本t檢驗)

根據題目我們也可以看出配對樣本 t 檢驗是用來檢驗兩配對正態總體的均值是否存在顯著差異的一種假設檢驗方法&#xff0c;雖然是兩組數據但是其來自同一部分個體在兩個時間段內的測試數據&#xff0c;是同一部份個體&#xff01; 進行配對樣本 t 檢驗之后也是分別做出原假設和備…

【基礎學習筆記 enum】TypeScript 中的 enum 枚舉類型介紹

因為之前網上查好多博客都是只說最基礎的&#xff0c;所以這里記錄一下&#xff0c;最基礎的放在最后面。 這里重點要記錄的是枚舉成員的值可以是字符串&#xff08;字符串枚舉&#xff0c;因為網上大部分只介紹常數枚舉&#xff09;&#xff0c;需要注意的一點是&#xff0c;…

ADC實驗

查看VR1鏈接的絲印&#xff1a;XadcAIN3 設置相關寄存器 使用的是通道3&#xff0c;要設置相應的通道寄存器 #include "exynos_4412.h"int main() {unsigned int AdcValue 0;/*將ADC的精度設置成 12bit*/ADCCON ADCCON | (1 << 16);/*使能ADC的分頻器*…

SAP ABAP 直接把內表轉換成PDF格式(smartform的打印函數輸出OTF格式數據)

直接上代碼&#xff1a; REPORT zcycle055.DATA: lt_tab TYPE TABLE OF zpps001. DATA: ls_tab TYPE zpps001.ls_tab-werks 1001. ls_tab-gamng 150.00. ls_tab-gstrp 20201202. ls_tab-aufnr 000010000246. ls_tab-auart 標準生產. ls_tab-gltrp 20201205. ls_tab-matn…

MyBatis面試題

MyBatis面試題&#xff1a; 1、MyBatis是什么&#xff1f; Mybatis是一個半ORM&#xff08;對象關系映射&#xff09;框架&#xff0c;它內部封裝了JDBC&#xff0c;加載驅動、創建連接、創建statement等繁雜的過程&#xff0c;開發者開發時只需要關注如何編寫SQL語句&#xf…

榮耀X40 GT真機調試APP,HBuilder X刷新不到設備

今天使用榮耀X40GT進行真機調試App的時候&#xff0c;hbuilder怎么都刷不出來設備&#xff0c;經歷一番風雨最終連接成功&#xff0c;特此記錄一下。 我的設備Android版本12&#xff0c;MagicOS版本7.0&#xff0c;進行了如下配置&#xff1a; 1、打開“設置”-》“系統和更新”…

keil5突然編譯輸出框build output 不見了

今天keil5突然編譯輸出框build output 不見了&#xff0c;但可以編譯和下載。 首先嘗試&#xff0c;在view里面打開和關閉build output window&#xff0c;沒有反應&#xff1b; 其次&#xff0c;點擊window-reset view to defaults&#xff0c;果然build output又恢復了&#…

數據結構---圖

這里寫目錄標題 圖的基本概念和術語基本概念和術語1基本概念和術語2 圖的類型定義抽象數據類型定義二級目錄二級目錄 一級目錄二級目錄二級目錄二級目錄二級目錄二級目錄二級目錄 圖的基本概念和術語 基本概念和術語1 V代表頂點的有窮非空集合 E代表邊的有窮集合 n為頂點 有向…

數據結構與算法-棧(LIFO)(經典面試題)

一&#xff1a;面試經典 1. 如何設計一個括號匹配的功能&#xff1f;比如給你一串括號讓你判斷是否符合我們的括號原則&#xff0c; 棧 力扣 2. 如何設計一個瀏覽器的前進和后退功能&#xff1f; 思想&#xff1a;兩個棧&#xff0c;一個棧存放前進棧&…

Python爬蟲之解決瀏覽器等待與代理隧道問題

作為專業爬蟲程序員&#xff0c;我們往往需要應對一些限制性挑戰&#xff0c;比如瀏覽器等待和使用代理隧道。在Python爬蟲開發中&#xff0c;這些問題可能會導致我們的爬蟲受阻。本文將為你分享解決這些問題的方案&#xff0c;幫助你順利應對瀏覽器等待和代理隧道的挑戰&#…

【vue3】固定上導航欄和左側導航欄,只顯示其他內容在主內容區域

實現思路&#xff1a; 在一個單獨的vue組件文件中只寫出上導航欄和左側導航欄的內容將你想要展示的頁面主內容寫到單獨的組件中在index.js寫路由&#xff0c;將【想要展示的頁面主內容的路由】作為【子路由】寫在【只寫出上導航欄和左側導航欄的路由】的下面&#xff1b; 在el…

Oracle 開發篇+Java通過共享模式訪問Oracle數據庫

標簽&#xff1a;共享服務器進程、shared server process釋義&#xff1a;shared server process是Oracle的一種數據庫連接技術&#xff0c;類似的還有專用模式和DRCP ★ 數據庫配置 alter system set shared_server_sessions1 scopespfile; alter system set max_shared_serv…

AIGC|AGI究竟是什么?為什么大家都在爭先入場?

一、AI大語言模型進入爆發階段 2022年12月ChatGPT突然爆火&#xff0c;原因是其表現出來的智能化已經遠遠突破了我們的常規認知。雖然其呈現在使用者面前僅僅只是一個簡單的對話問答形式&#xff0c;但是它的內容化水平非常強大&#xff0c;甚至在某些方面已經超過人類了&#…