題目**,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 ...