兩數相加Ⅰ和Ⅱ
一、第2題
1.題目介紹
給出兩個 非空 的連結串列用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。
如果,我們將這兩個數相加起來,則會返回一個新的連結串列來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/add-two-numbers
2.思路介紹
總體上四個步驟,1.遍歷l1和l2相同長度的部分,將兩者相加的值插入目標列表。2.遍歷l1剩餘部分,將值插入目標列表,若有的話。3.遍歷l2剩餘部分,將值插入目標列表,若有的話。4.若最後一位大於十,則需進位。細節上用mark來標記進位。
3.程式碼展示
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
if not l1 and not l2: return None
move1 = l1
move2 = l2
dummy = ListNode(0)
move = dummy
mark = 0
while l1 and l2:
t = l1.val + l2.val + mark
if t >= 10:
n = t%10
mark = 1
else:
n = t%10
mark = 0
move.next = ListNode(n)
move = move.next
l1 = l1.next
l2 = l2.next
while l1:
t = l1.val + mark
if t >= 10:
n = t%10
mark = 1
else:
n = t%10
mark = 0
move.next = ListNode(n)
move = move.next
l1 = l1.next
while l2:
t = l2.val + mark
if t >= 10:
n = t%10
mark = 1
else:
n = t%10
mark = 0
move.next = ListNode(n)
move = move.next
l2 = l2.next
if mark == 1:
move.next = ListNode(1)
move = move.next
return dummy.next
二、第445題
1.題目介紹
給你兩個 非空 連結串列來代表兩個非負整數。數字最高位位於連結串列開始位置。它們的每個節點只儲存一位數字。將這兩數相加會返回一個新的連結串列。
你可以假設除了數字 0 之外,這兩個數字都不會以零開頭
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/add-two-numbers-ii
2.思路介紹
1.將l1和l2反轉。
2.將l1的值加l2的值得dummy。
3.反轉dummy
3.程式碼展示
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
def reverse(n):
pre,cur = None,n
while cur:
cur.next,pre,cur = pre,cur,cur.next
return pre
l1 = reverse(l1)
l2 = reverse(l2)
dummy = ListNode(0)
move = dummy
mark = 0
#遍歷l1和l2
while l1 and l2:
t = l1.val + l2.val + mark
if t >= 10:
n = t%10
mark = 1
else:
n = t%10
mark = 0
move.next = ListNode(n)
move = move.next
l1 = l1.next
l2 = l2.next
#遍歷l1
while l1:
t = l1.val + mark
if t >= 10:
n = t%10
mark = 1
else:
n = t%10
mark = 0
move.next = ListNode(n)
move = move.next
l1 = l1.next
#遍歷l2
while l2:
t = l2.val + mark
if t >= 10:
n = t%10
mark = 1
else:
n = t%10
mark = 0
move.next = ListNode(n)
move = move.next
l2 = l2.next
#查漏
if mark == 1:
move.next = ListNode(1)
move = move.next
dummy.next = reverse(dummy.next)
return dummy.next
總結
沒有看大佬們的題解,自己想出來的,所以就發出來了。明示前幾天寫的題目都是看大佬,自己沒有寫出來。其中一個題目的思路是將連結串列連成環,再截斷;另外一個題目的思路是怎麼將節點設為頭節點。今天的程式碼很容易想出來,所以寫的程式碼很長,而大佬們程式碼簡單而且高效,比起來感覺自己實在是太慚愧了。(PS:今天沒有看大佬們的題解,明天好好看看,昇華一下自己的人生)相關文章
- Leetcode兩數相加LeetCode
- LeetCode——兩數相加LeetCode
- LeetCode-兩數相加LeetCode
- 2. 兩數相加
- 【leetcode】【2、兩數相加】LeetCode
- LeetCode 2——兩數相加LeetCode
- 【LeetCode】2 兩數相加LeetCode
- leetcode 2. 兩數相加LeetCode
- LeetCode 2.兩數相加LeetCode
- 演算法-兩數相加演算法
- LeetCode題集-2 - 兩數相加LeetCode
- 程式設計題-兩數相加程式設計
- LeetCode 第二題兩數相加LeetCode
- [LeetCode 刷題] 2. 兩數相加LeetCode
- leetcode之兩數相加解題思路LeetCode
- 力扣題解2-兩數相加力扣
- LeetCode2: Add two numbers(兩數相加)LeetCode
- 神奇補0解決連結串列相加:LeeCode002兩數相加
- 演算法--力扣2. 兩數相加演算法力扣
- 【刷演算法】LeetCode.2-兩數相加演算法LeetCode
- LeetCode-2. 兩數相加(連結串列+大數加法模擬)LeetCode
- 20241107,LeetCode 每日一題,使用 Go 計算兩數相加LeetCode每日一題Go
- 簡單演算法題:leetcode-2 兩數相加演算法LeetCode
- 演算法5: LeetCode_單連結串列_兩數相加演算法LeetCode
- LeetCode高頻演算法面試題 - 002 - 兩數相加LeetCode演算法面試題
- 讓我們一起啃演算法----兩數相加演算法
- leetcode 解題 2.兩數相加-python3 題解LeetCodePython
- Leetcode:2. 兩數相加(C++帶詳細註釋)LeetCodeC++
- ZOJ Martian Addition (20進位制的兩個大數相加)
- leetcode 兩數相加(add two numbers) Python程式設計實現LeetCodePython程式設計
- 從零打卡leetcode之day 2---兩數相加LeetCode
- 使用純粹的ABAP位操作實現兩個整數相加
- 題目:2.兩數相加 解題思路及Java實現Java
- PHP字串數字相加PHP字串
- 454_四數相加Ii
- 用 PHP 在 力扣 刷演算法 [兩數相加]{一天一更}PHP力扣演算法
- 【附加題1】通過程式碼實現兩個超大的數字相加的結果?
- 阿里開發者招聘節 | 面試題14:如何實現兩金額資料相加(最多小數點兩位)阿里面試題