生活随笔
收集整理的這篇文章主要介紹了
2. 两数相加(中等)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
2. 兩數(shù)相加(中等)
給出兩個(gè) 非空 的鏈表用來(lái)表示兩個(gè)非負(fù)的整數(shù)。其中,它們各自的位數(shù)是按照 逆序 的方式存儲(chǔ)的,并且它們的每個(gè)節(jié)點(diǎn)只能存儲(chǔ) 一位 數(shù)字。
如果,我們將這兩個(gè)數(shù)相加起來(lái),則會(huì)返回一個(gè)新的鏈表來(lái)表示它們的和。
您可以假設(shè)除了數(shù)字 0 之外,這兩個(gè)數(shù)都不會(huì)以 0 開頭。
示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/add-two-numbers
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
理解與想法:
答題框中給出的ListNode類型其實(shí)是結(jié)點(diǎn)類型,鏈表怎么實(shí)現(xiàn)的,并不關(guān)注。給出的參數(shù)也是給的頭結(jié)點(diǎn)
這是示例解答,代碼非常簡(jiǎn)潔
新建保存結(jié)果的ListNode實(shí)例,用兩個(gè)變量分別保存它頭結(jié)點(diǎn):一個(gè)用于計(jì)算時(shí)向后遍歷,另外一個(gè)用于返回變量s暫存變量和。當(dāng)前位的值為s%10,進(jìn)位為s = s//10. 在當(dāng)前位的時(shí)候直接取的值,進(jìn)位時(shí)重置了暫存變量l1.val if l1 else 0 代碼精簡(jiǎn)。如果l1不為空,取值為l1.val,否則為0l1、l2一直向后遍歷,當(dāng)某一個(gè)到尾部時(shí),這個(gè)鏈表的值為0,另一個(gè)繼續(xù)向后遍歷
class Solution:def addTwoNumbers(self
, l1
: ListNode
, l2
: ListNode
) -> ListNode
:dummy
= p
= ListNode
(None) s
= 0 while l1
or l2
or s
: s
+= (l1
.val
if l1
else 0) + (l2
.val
if l2
else 0) p
.next = ListNode
(s
% 10) p
= p
.next s
//= 10 l1
= l1
.next if l1
else None l2
= l2
.next if l2
else Nonereturn dummy
.next
下面是我寫的,是那個(gè)意思,但是沒(méi)有考慮變量類型.
按節(jié)點(diǎn)——>鏈表過(guò)程建立
move_one_step向后移動(dòng)一步,返回一個(gè)結(jié)點(diǎn)的值以及指針的位置
class ListNode:def __init__(self
, x
):self
.element
= xself
.next = None
class List:def __init__(self
, node
=None):if node
is None:self
.__head
= node
else:self
.__head
= ListNode
(node
)def is_empty(self
):return self
.__head
== Nonedef append(self
, item
):"""鏈表尾部添加元素"""node
= ListNode
(item
)if self
.is_empty
():self
.__head
= node
else:cur
= self
.__head
while cur
.next is not None:cur
= cur
.nextcur
.next = node
def move_one_step(self
):if self
.is_empty
():returncursor
= self
.__headself
.__head
=cursor
.nextreturn cursor
.element
def travel(self
):'''遍歷鏈表,輸出:return: None'''if self
.is_empty
():returncursor
= self
.__head
while cursor
!= None:print(cursor
.element
, end
=' ')cursor
= cursor
.next
class Solution:def addTwoNumbers(self
,l1
,l2
):li1
= List
()li2
= List
()for item
in l1
:li1
.append
(item
)for item
in l2
:li2
.append
(item
)l
= List
()flag
= 0while not(li1
.is_empty
() or li2
.is_empty
()):num1
= li1
.move_one_step
()num2
= li2
.move_one_step
()temp_sum
= num1
+ num2
+ flag
if temp_sum
< 10:l
.append
(temp_sum
)flag
= 0else:l
.append
(temp_sum
-10)flag
= 1while not li1
.is_empty
():temp_sum
= li1
.move_one_step
()+flagl
.append
(temp_sum
)flag
= 0while not li2
.is_empty
():temp_sum
= li2
.move_one_step
()+flagl
.append
(temp_sum
)flag
= 0return l
A
= Solution
()
l1
= [3,4,2]
l2
= [4,6,5,3,5]
l
= A
.addTwoNumbers
(l1
,l2
)
l
.travel
()
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖
總結(jié)
以上是生活随笔為你收集整理的2. 两数相加(中等)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。