leetcode之兩數相加

2021-10-03 07:08:49 字數 3377 閱讀 6407

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

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

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

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

輸出:7 -> 0 -> 8

原因:342 + 465 = 807

1> python:大數超出?很少吧。。。暴力點直接先轉成整數,再相加,就不用考慮進製這複雜的東西了。72ms/13.5mb

# 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

2>使用鍊錶,考慮進製。

這裡我不另外申請空間,直接使用鍊錶1的空間,故而稍有點複雜,條件判得多。

首先乙個進製識別符號flag,就設為bool型別。(1和0也行,後面發現直接//和%運算出flag比較慢)

先同時遍歷兩個鍊錶,進行進製運算等。

接著再遍歷另乙個沒遍歷完的鍊錶。

最後還要檢驗一下是否有進製,進製的話,末尾再加乙個1

60ms/13.5mb

# 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

c++**如下,重新申明了乙個新鍊錶,故而簡潔明瞭,但空間耗費極大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...