LeetCode第2題題解:兩數(shù)相加

LeetCode第2題:兩數(shù)相加


Ps:本系列文章只為記錄自己刷LeetCode過程中的解題過程和思路。


題目來源,LeetCode

題目描述:

給出兩個非空的鏈表用來表示兩個非負(fù)的整數(shù)。其中,它們各自的位數(shù)是按照逆序的方式存儲的,并且它們的每個節(jié)點只能存儲一位數(shù)字。

如果,我們將這兩個數(shù)相加起來,則會返回一個新的鏈表來表示它們的和。

您可以假設(shè)除了數(shù)字 0 之外,這兩個數(shù)都不會以 0開頭。

示例:

輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

輸出:7 -> 0 -> 8

原因:342 + 465 = 807


解題過程和思路:

這道題的題目很明確,按照我們手算的思路來:從低位到高位依次相加,并且有進(jìn)位就向高位進(jìn)位即可。其實就是用鏈表來存儲數(shù)字,并且用計算機(jī)模擬手算的過程罷了。但是這題以我目前的能力,不太理解要怎么操作才能加快算法的效率(不能打敗90%以上的人),留待以后補(bǔ)充。


解題收獲:

記得鏈表最初在C++中接觸過,其他語言中暫時沒有接觸過鏈表。這題讓我重復(fù)復(fù)習(xí)了一遍鏈表,并且熟悉了在python中建立和使用鏈表的方法,記住啦。


代碼展示

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        result_head = p = ListNode(None) # result_head為結(jié)果鏈表的頭結(jié)點(空的,返回的時候要返回                                               # result.next),p為用來遍歷的指針
        s = 0 # 初始進(jìn)位為0
        while l1 or l2 or s: # 如果l1非空或l2非空或有上一次計算有進(jìn)位s非0
            s = s + (l1.val if l1 else 0) + (l2.val if l2 else 0)
            val = s % 10 # eg. 21 % 10 = 1
            s = s // 10 # eg. 21 // 10 = 2
            p.next = ListNode(val) # 以val值新建一個結(jié)點
            p = p.next # 結(jié)果鏈表的遍歷指針往下一位移
            l1 = l1.next if l1 else None # 加數(shù)鏈表的指針對應(yīng)往下一位移
            l2 = l2.next if l2 else None # 加數(shù)鏈表的指針對應(yīng)往下一位移
        return result_head.next # 頭結(jié)點為空結(jié)點,因此返回頭結(jié)點的下一個結(jié)點


結(jié)果展示

結(jié)果展示
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容