LeetCode第2題題解 兩數相加

2022-03-09 00:37:54 字數 1620 閱讀 4782

題目**,leetcode

題目描述:

給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。

如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。

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

示例:

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

輸出:7 -> 0 -> 8

原因:342 + 465 = 807

解題過程和思路:

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

解題收穫:

記得鍊錶最初在c++中接觸過,其他語言中暫時沒有接觸過鍊錶。這題讓我重複複習了一遍鍊錶,並且熟悉了在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為結果鍊錶的頭結點(空的,返回的時候要返回 # result.next),p為用來遍歷的指標

s = 0 # 初始進製為0

while l1 or l2 or s: # 如果l1非空或l2非空或有上一次計算有進製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值新建乙個結點

p = p.next # 結果鍊錶的遍歷指標往下一位移

l1 = l1.next if l1 else none # 加數鍊錶的指標對應往下一位移

l2 = l2.next if l2 else none # 加數鍊錶的指標對應往下一位移

return result_head.next # 頭結點為空結點,因此返回頭結點的下乙個結點

結果展示

LeetCode第1題題解 兩數之和

題目 leetcode 題目描述 給定乙個整數陣列 nums和乙個目標值 target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7,11,15 target 9 因為 nums ...

LeetCode第2題兩數相加

題意理解 給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。解題思路 1 題意理解 對應節點...

LeetCode刷題筆記第2題 兩數相加

給你兩個 非空 的鍊錶,表示兩個非負的整數。它們每位數字都是按照 逆序 的方式儲存的,並且每個節點只能儲存 一位 數字。請你將兩個數相加,並以相同形式返回乙個表示和的鍊錶。你可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 1 輸入 l1 2,4,3 l2 5,6,4 輸出 7,0,8 ...