天天看點

LeetCode-2 兩數相加題解

題目來源:力扣(LeetCode)

連結:https://leetcode-cn.com/problems/add-two-numbers

題目描述

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

請你将兩個數相加,并以相同形式傳回一個表示和的連結清單。

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

示例:

LeetCode-2 兩數相加題解

輸入:l1 = [2,4,3], l2 = [5,6,4]

輸出:[7,0,8]

解釋:342 + 465 = 807.

示例 2:

輸入:l1 = [0], l2 = [0]

輸出:[0]

示例 3:

輸入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]

輸出:[8,9,9,9,0,0,0,1]

提示:

每個連結清單中的節點數在範圍 [1, 100] 内

0 <= Node.val <= 9

題目資料保證清單表示的數字不含前導零

解題思路

此題主要考查的是連結清單的基礎操作,思路十分的明确,連結清單的基礎操作就不加贅述了。

根據題目所述,數字是以連結清單的形式逆序存放的,這樣一來,逆序的問題也不需要考慮了,餘下的問題僅剩兩個:

1、高位補0的問題

由于數字的位數不一定相等,是以連結清單的長度也不一定相等,需要在計算完連結清單共同相加的部分後,會有一條連結清單多出一部分,需要将多出的這部分連接配接到新的連結清單上去。

2、進位問題

這裡設定了一個标志位作為進位,每次求和時候會加入标志位,并且求和完畢後更新标志位。

重做這道題的原因是當時在學習Python,是以使用了Python寫了一遍這題,熟悉了一下Python的文法。

源碼展示

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

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        root = ListNode(l1.val + l2.val)
        root.next = None
        fa = root
        if root.val >= 10:
            root.val = root.val % 10
            jw = 1
        else:
            jw = 0
        i = 1
        p1 = l1.next
        p2 = l2.next
        while p1 != None and p2 != None:
            if p1.val + p2.val + jw >= 10:
                node = ListNode((p1.val + p2.val + jw) % 10)
                jw = 1
            else:
                node = ListNode(p1.val + p2.val + jw)
                jw = 0
            fa.next = node
            fa = node
            p1 = p1.next
            p2 = p2.next
            i += 1
        if p1 == None:
            fa.next = p2
        else:
            fa.next = p1
        p = fa.next
        while jw == 1:
            if p != None:
                p.val += 1
                if (p.val >= 10):
                    p.val = p.val % 10
                else:
                    jw = 0
            else:
                p = ListNode(1)
                p.next=None
                fa.next=p
                break
            if p.next != None:
                fa=p
                p = p.next
            else:
                fa=p
                p = None
        return root      

運作結果

LeetCode-2 兩數相加題解