【leetcode刷題】20T2-兩數相加
- 2020 年 2 月 16 日
- 筆記
木又同學2020年第2篇解題報告
leetcode第2題:兩數相加
https://leetcode-cn.com/problems/add-two-numbers/
【題目】
給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,並且它們的每個節點只能存儲 一位 數字。
如果,我們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
示例: 輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 輸出:7 -> 0 -> 8 原因:342 + 465 = 807
【思路】
這道題看著挺簡單的,但是細節很多。(當然,轉換為數字,進行相加,最後轉換成鏈表,這樣的python程式碼幾乎沒有難度)
按照鏈表操作,首先要考慮進位,其次要考慮兩個鏈表長度不一,三是鏈表相加完後可能還存在進位。
(比較高興的是,這是我第一次寫完程式碼,沒做任何修改,一次通過~【機智】)
【程式碼】
python版本
# Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): # self.val = x # self.next = None class Solution(object): def deal_forward(self, val): # 處理進位 add_one = 0 if val >= 10: add_one = 1 val = val % 10 return val, add_one def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ add_one = 0 h1, h2 = l1, l2 l3, h3 = None, None # 相加 while h1 and h2: val = h1.val + h2.val + add_one val, add_one = self.deal_forward(val) h1, h2 = h1.next, h2.next if h3 is None: h3 = ListNode(val) l3 = h3 else: h3.next = ListNode(val) h3 = h3.next # 剩餘部分 while h1: val = h1.val + add_one val, add_one = self.deal_forward(val) h1 = h1.next h3.next = ListNode(val) h3 = h3.next while h2: val = h2.val + add_one val, add_one = self.deal_forward(val) h2 = h2.next h3.next = ListNode(val) h3 = h3.next if add_one != 0: h3.next = ListNode(add_one) return l3
前一篇文章:【leetcode刷題】20T1-兩數之和