給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)1> python:大數超出?很少吧。。。暴力點直接先轉成整數,再相加,就不用考慮進製這複雜的東西了。輸出:7 -> 0 -> 8
原因:342 + 465 = 807
72ms/13.5mb
2>使用鍊錶,考慮進製。# definition for singly-linked list.
# class listnode:
# def __init__(self, x):
# self.val = x
# self.next = none
class
solution
:def
getstr
(self, cur)
: strx =
''while cur:
strx =
str(cur.val)
+ strx
cur = cur.
next
return strx
defaddtwonumbers
(self, l1: listnode, l2: listnode)
-> listnode:
cur1, cur2 = l1, l2
num1 =
int(self.getstr(cur1)
) num2 =
int(self.getstr(cur2)
) ans =
str(num1+num2)
lena =
len(ans)
head = listnode(0)
cur = head
for i in
range
(lena-1,
-1,-
1): cur.
next
= listnode(
int(ans[i]))
cur = cur.
next
return head.
next
這裡我不另外申請空間,直接使用鍊錶1的空間,故而稍有點複雜,條件判得多。
首先乙個進製識別符號flag,就設為bool型別。(1和0也行,後面發現直接//和%運算出flag比較慢)
先同時遍歷兩個鍊錶,進行進製運算等。
接著再遍歷另乙個沒遍歷完的鍊錶。
最後還要檢驗一下是否有進製,進製的話,末尾再加乙個1
60ms/13.5mb
c++**如下,重新申明了乙個新鍊錶,故而簡潔明瞭,但空間耗費極大# 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:
cur1, cur2 = l1, l2
flag =
false
cur1.val = cur1.val+cur2.val
if cur1.val >9:
flag =
true
cur1.val %=
10while cur1.
next
and cur2.
next
: tmp = cur1.
next
.val + cur2.
next
.val
if flag:
flag =
false
tmp +=
1if tmp >9:
flag =
true
tmp %=
10 cur1.
next
.val = tmp
cur1 = cur1.
next
cur2 = cur2.
next
while cur1.
next
:if flag and cur1.
next
.val ==9:
cur1.
next
.val =
0elif flag:
cur1.
next
.val +=
1 flag =
false
cur1 = cur1.
next
while cur2.
next
: tmp = cur2.
next
.val
if flag and tmp ==9:
cur2.
next
.val =
0elif flag:
cur2.
next
.val +=
1 flag =
false
cur1.
next
= cur2.
next
cur1 = cur1.
next
cur2 = cur2.
next
if flag:
cur1.
next
= listnode(1)
return l1
52ms/72.6mb
:
/**
* definition for singly-linked list.
* struct listnode
* };
*/class
solution
return head-
>next;}}
;
LeetCode之兩數相加
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 7...
LeetCode之兩數相加
leetcode之兩數相加 給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2...
leetcode之兩數相加
這題每用到什麼特殊的演算法,直接上 definition for singly linked list.class listnode def init self,val 0,next none self.val val self.next next class solution def addtwo...