2. 兩數(shù)相加(AddTwoNumbers)

上一篇:1.TwoSum(兩數(shù)之和)

題目(Medium)

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Example:

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.

給定兩個(gè)非空鏈表來代表兩個(gè)非負(fù)數(shù)混蔼,位數(shù)按照逆序方式存儲(chǔ)愿卒,它們的每個(gè)節(jié)點(diǎn)只存儲(chǔ)單個(gè)數(shù)字。將這兩數(shù)相加會(huì)返回一個(gè)新的鏈表色查。

你可以假設(shè)除了數(shù)字 0 之外睦柴,這兩個(gè)數(shù)字都不會(huì)以零開頭

腦洞時(shí)間

這個(gè)題其實(shí)求多位數(shù)相加,主要的難點(diǎn)就是進(jìn)位的記錄。還有要注意的有:
1.當(dāng)兩個(gè)鏈表
長度不一致時(shí)的遍歷策略窄瘟,要注意較長的鏈表的值相當(dāng)于原值轉(zhuǎn)移
2.當(dāng)個(gè)鏈表都遍歷相加后依然有進(jìn)位,eg:13+89=102趟卸,存儲(chǔ)為[3->1],[9->8],遍歷相加后為:[2->0],此時(shí)8+1+1(上次進(jìn)位)又形成了進(jìn)位蹄葱,需要新增一位[2->0->1](形成的進(jìn)位)]

廢話少說擼代碼

# Definition for singly-linked list.
class ListNode:

    def __init__(self, x):
        self.val = x
        self.next = None

class LinkList:
    def __init__(self):
        self.head = None
        self.size = 0

    def isEmpty(self):
        return self.head == None

    def length(self):

        current = self.head
        count = 0

        while current != None:
            count += 1
            current = current.next

        return count

    def append(self, val):
        temp = ListNode(val)

        if self.isEmpty():
            self.head = temp

        else:
            current = self.head
            while current.next != None:
                current = current.next

            current.next = temp

    def add(self, val):
        temp = ListNode(val)

        if self.isEmpty():
            self.head = temp

        else:
            temp.next = self.head
            self.head = temp

        # self.printf()

    def printf(self):
        if self.isEmpty():
            print("NONE")

        else:
            current = self.head
            while current != None:
                print(current.val)
                current = current.next


class Solution:

    # 求當(dāng)前鏈表長度
    def length(self, l):
        current = l
        count = 0

        while current != None:
            count += 1
            current = current.next

        return count

    def addTwoNumbers(self, l1, l2):

        rList = LinkList()

        if self.length(l1) >= self.length(l2):
            current1 = l1
            current2 = l2
            count = self.length(l2)

        else:
            current2 = l1
            current1 = l2
            count = self.length(l1)

        zCount = 0
        addFlag = 0

        while current1 != None:
            #按長表來遍歷
            tempVal = current1.val
            # 判斷短表是否結(jié)束
            if zCount < count:
                tempVal = tempVal + current2.val
                current2 = current2.next

            # 判斷進(jìn)位
            if addFlag > 0:
                tempVal = tempVal + addFlag
                addFlag = 0

            # 記錄進(jìn)位
            if tempVal >= 10:
                tempVal = tempVal - 10
                addFlag = 1

            rList.append(tempVal)

            current1 = current1.next
            zCount = zCount + 1

        # 鏈表都遍歷相加完后依然有進(jìn)位氏义,新增一位
        if addFlag > 0:
            rList.append(addFlag)

        return rList


def main():
    ll1 = LinkList()
    ll2 = LinkList()

    # 342+465=807
    ll1.add(3)
    ll1.add(4)
    ll1.add(2)

    ll2.add(4)
    ll2.add(6)
    ll2.add(5)
    # ll2.add(0)

    # l1.printf()
    # l2.printf()

    l1 = ll1.head
    l2 = ll2.head

    rl = Solution().addTwoNumbers(l1, l2)
    rl.printf()

if __name__ == '__main__':
    main()

算法復(fù)雜度

時(shí)間復(fù)雜度為:O(N),N為較長鏈表的長度图云,即

空間復(fù)雜度為:O(N)

三省吾題

剛開始以為操作的是兩個(gè)鏈表惯悠,寫參數(shù)的時(shí)候就傳了兩個(gè)鏈表。Leetcode運(yùn)行老是報(bào)錯(cuò)竣况,說有些方法沒有定義克婶。仔細(xì)一看,才發(fā)現(xiàn)傳的參數(shù)是節(jié)點(diǎn)指針丹泉,稍作修改乎就Accepted了情萤。

總結(jié)而言,這道題并不難摹恨,主要考察數(shù)據(jù)結(jié)構(gòu)中鏈表的構(gòu)造與遍歷思路很快就有了筋岛,我花費(fèi)的時(shí)間有點(diǎn)長是因?yàn)樵陧槺憔毩?xí)Python的語法〔撬可不要笑話我這個(gè)Python新手……

.
.
.

下一篇:3.無重復(fù)字符的最長子串(LongestSubstringWithoutRepeatingCharacters)

------------------------------20180311夜

刷Leetcode泉蝌,

在我看來,

其實(shí)是為了維持一種編程狀態(tài)揩晴!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末勋陪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子硫兰,更是在濱河造成了極大的恐慌诅愚,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劫映,死亡現(xiàn)場離奇詭異违孝,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)泳赋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門雌桑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人祖今,你說我怎么就攤上這事校坑。” “怎么了千诬?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵耍目,是天一觀的道長。 經(jīng)常有香客問我徐绑,道長邪驮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任傲茄,我火速辦了婚禮毅访,結(jié)果婚禮上沮榜,老公的妹妹穿的比我還像新娘。我一直安慰自己喻粹,他們只是感情好敞映,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著磷斧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捷犹。 梳的紋絲不亂的頭發(fā)上弛饭,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機(jī)與錄音萍歉,去河邊找鬼侣颂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛枪孩,可吹牛的內(nèi)容都是我干的憔晒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蔑舞,長吁一口氣:“原來是場噩夢啊……” “哼拒担!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起攻询,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤从撼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后钧栖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體低零,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年拯杠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了掏婶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡潭陪,死狀恐怖雄妥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情畔咧,我是刑警寧澤茎芭,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站誓沸,受9級特大地震影響梅桩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拜隧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一宿百、第九天 我趴在偏房一處隱蔽的房頂上張望趁仙。 院中可真熱鬧,春花似錦垦页、人聲如沸雀费。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盏袄。三九已至,卻和暖如春薄啥,著一層夾襖步出監(jiān)牢的瞬間辕羽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工垄惧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留刁愿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓到逊,卻偏偏與公主長得像铣口,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子觉壶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,345評論 0 10
  • LeetCode 刷題隨手記 - 第一部分 前 256 題(非會(huì)員)脑题,僅算法題,的吐槽 https://leetc...
    蕾娜漢默閱讀 17,817評論 2 36
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)掰曾。 張土汪:刷leetcod...
    土汪閱讀 12,748評論 0 33
  • 從今天開始旭蠕,寫一下我在刷 LeetCode 時(shí)的心得體會(huì),包括自己的思路和別人的優(yōu)秀思路旷坦,歡迎各種監(jiān)督疤桶尽! ...
    秋名山菜車手閱讀 680評論 4 1
  • 佳節(jié)漸近秒梅,春節(jié)的氣息越來越強(qiáng)烈旗芬,生機(jī)盎然的春天最適合出游了,作為全國最受歡迎的城市之一捆蜀,西安無疑是很多人理想的度假...
    諾世嘉頓閱讀 983評論 0 0