給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。
你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。
示例:
題目的前提,將數字使用鏈結來儲存,比如數字 123 ,儲值為3->2->1。個位數在前,接著是十位、百位......。輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
複製**
要做的事情是:2個數字,都使用了鍊錶來儲存,我們需要將這兩個數字相加,得到他們的和,將他們相加的結果儲存成跟之前一樣結構的鍊錶。
需要做題者熟悉鍊錶結構和鍊錶的遍歷。
思路一:
鍊錶畢竟是鍊錶,無法直接簡單地進行相加操作。所以比較容易想到的思路是,兩個鍊錶分別轉化成數字,然後將兩個數字相加,得到了和之後,再將結果轉化成鍊錶。
思路二:
由於是鍊錶是個數在前,接著是十位、百位......所以可以同時遍歷兩個鍊錶,然後將遍歷出來的元素進行相加,將結果轉化成新鍊錶的元素。這樣新鍊錶就是題目所要求的鍊錶。需要注意的事,相加可能會有進製出現,比如9+9=18,此時新元素應該是8,然後下乙個元素的時候應該加上這個進製1。
思路一**
思路2**:#方法一。將兩個鏈結分別轉成陣列,然後轉成陣列,進行相加運算。得到的結果再轉成陣列,然後轉成鍊錶。
def addtwonumbers(self, l1, l2):
""" :type l1: listnode
:type l2: listnode
:rtype: listnode
"""#遍歷解析第1個數
head1 = l1
a1 =
while (head1):
head1 = head1.next
"a1=",a1
#遍歷解析第2個數
head2 = l2
a2 =
while (head2):
head2 = head2.next
"a2=",a2
#將第1個陣列轉成數字
num1 = 0
len1 = len(a1)
for i in range(len1):
# print "i=",i
num1 += a1[i]*(10**i)
"num1=",num1
#將第2個陣列轉成數字
num2 = 0
len2 = len(a2)
for i in range(len2):
# print "i=",i
num2 += a2[i]*(10**i)
"num2=",num2
num = num1 + num2
"num=",num
#特殊情況,直接返回
if num == 0:
node = listnode(0)
return node
#將num轉成陣列
a =
i = 1
while (num != 0):
temp = num % (10)
num = num / (10)
"temp=",temp
"num0=",num
i += 1
"a=",a
#將陣列轉成鍊錶
node = listnode(a[0])
head = node
for i in range(1,len(a)):
newnode = listnode(a[i])
head.next = newnode
head = head.next
head.next = none
return node
複製**
個人目前只懂一丁點python語法,所以不做語法上的優化,而且整體**風格效果會盡量跟c語言趨於一致。#方法二:同時遍歷兩個鍊錶,將對應位的數子相加。如果有進製就記錄下來。
def addtwonumbers(self, l1, l2):
""" :type l1: listnode
:type l2: listnode
:rtyp
"""#頭結點
head = none
#當前節點
currentnode = none
#進製carry = 0
#是否第一次遍歷
isfirst = true
while (l1 or l2 or carry != 0):
#置0val1 = 0
val2 = 0
#計算val1
if l1:
val1 = l1.val
l1 = l1.next
#計算val2
if l2:
val2 = l2.val
l2 = l2.next
#計算val,注意進製也要加
val = val1 + val2 + carry
#大於10的時候表示有進製
if (val/10 > 0):
carry = 1
val = val%10
else:
carry = 0
#建立節點
node = listnode(val)
if isfirst:
#第一次建立節點做特殊處理
currentnode = node
head = currentnode
isfirst = false
else:
currentnode.next = node
currentnode = currentnode.next
return head
複製**
Leetcode刷題(2 兩數相加)
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...
LeetCode刷題 2 兩數相加
題目要求 給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 ...
LeetCode刷題系列 2 兩數相加
題目 給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭 示例 輸入 2 4 3 5 6 4 ...