LeetCode100題2 兩數之和

2021-10-03 13:27:23 字數 3565 閱讀 6022

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

如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。

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

輸出:7 -> 0 -> 8

原因:342 + 465 = 807

法1

# 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:

prenode = listnode(0)

#prenode指向值為0的結點,

lastnode = prenode#定義l結點指向初始值

val =

0while val or l1 or l2:

val, cur =

divmod

(val +

(l1.val if l1 else0)

+(l2.val if l2 else0)

,10) lastnode.

next

= listnode(cur)

#l的下乙個指向兩數相加的個位數的值

lastnode = lastnode.

next

l1 = l1.

next

if l1 else

none

l2 = l2.

next

if l2 else

none

return prenode.

next

#返回初試結點的下乙個結點

# def generatelist(l: list) -> listnode:

# prenode = listnode(0)

# lastnode = prenode

# for val in l:

# lastnode.next = listnode(val)

# lastnode = lastnode.next

# return prenode.next

defprintlist

(l: listnode)

:while l:

print

("%d, "

%(l.val)

, end ='')

l = l.

next

print(''

)if __name__ ==

"__main__"

: l1 = generatelist([1

,5,8

])l2 = generatelist([9

,1,2

,9])

printlist(l1)

printlist(l2)

s = solution(

)sum

= s.addtwonumbers(l1, l2)

printlist(

sum)

法2,定義結點類看的不太懂!!

# definition for singly-linked list.

class

listnode()

:def

__init__

(self, val):if

isinstance

(val,

int)

: self.val = val

self.

next

=none

elif

isinstance

(val,

list):

self.val = val[0]

self.

next

=none

cur = self

for i in val[1:

]:cur.

next

= listnode(i)

cur = cur.

next

defgatherattrs

(self)

:return

", "

.join(

"{}: {}"

.format

(k,getattr

(self, k)

)for k in self.__dict__.keys())

def__str__

(self)

:return self.__class__.__name__+

" ".

format

(self.gatherattrs())

+"}"

class

solution

:def

addtwonumbers

(self, l1: listnode, l2: listnode)

-> listnode:

ifisinstance

(l1,

list):

l1 = listnode(l1)

l2 = listnode(l2)

re = listnode(0)

r=re

carry=

0while

(l1 or l2)

: x= l1.val if l1 else

0 y= l2.val if l2 else

0 s=carry+x+y

carry=s//

10 r.

next

=listnode(s%10)

r=r.

next

if(l1!=

none

):l1=l1.

next

if(l2!=

none

):l2=l2.

next

if(carry>0)

: r.

next

=listnode(1)

return re.

next

# @lc code=end

if __name__ ==

"__main__"

: test = solution(

)print

(test.addtwonumbers([1

,3],

[2,1

,3])

)

leetcode熱門100題01兩數之和

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

leetcode熱門100題02兩數相加

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

LeetCode熱題 HOT 100兩數之和

開篇今天興趣來潮打算去leetcode刷刷演算法題,為面試準備,忽然看到頁面的leetcode 熱題 hot 100,然後就點進去了,然後就有了這個文章!兩數之和 給定乙個整數陣列 nums 和乙個整數目標值 target,請你在該陣列中找出 和為目標值 的那 兩個 整數,並返回它們的陣列下標。你可...