生活随笔
收集整理的這篇文章主要介紹了
                                
2. 两数相加(中等)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
 
                                
                            
                            
                            2. 兩數(shù)相加(中等)
 
給出兩個 非空 的鏈表用來表示兩個非負的整數(shù)。其中,它們各自的位數(shù)是按照 逆序 的方式存儲的,并且它們的每個節(jié)點只能存儲 一位 數(shù)字。
 
如果,我們將這兩個數(shù)相加起來,則會返回一個新的鏈表來表示它們的和。
 
您可以假設(shè)除了數(shù)字 0 之外,這兩個數(shù)都不會以 0 開頭。
 
示例:
 
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
 輸出:7 -> 0 -> 8
 原因:342 + 465 = 807
 
來源:力扣(LeetCode)
 鏈接:https://leetcode-cn.com/problems/add-two-numbers
 著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
 
理解與想法:
 答題框中給出的ListNode類型其實是結(jié)點類型,鏈表怎么實現(xiàn)的,并不關(guān)注。給出的參數(shù)也是給的頭結(jié)點
 
這是示例解答,代碼非常簡潔
 
新建保存結(jié)果的ListNode實例,用兩個變量分別保存它頭結(jié)點:一個用于計算時向后遍歷,另外一個用于返回變量s暫存變量和。當(dāng)前位的值為s%10,進位為s = s//10. 在當(dāng)前位的時候直接取的值,進位時重置了暫存變量l1.val if l1 else 0 代碼精簡。如果l1不為空,取值為l1.val,否則為0l1、l2一直向后遍歷,當(dāng)某一個到尾部時,這個鏈表的值為0,另一個繼續(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
 
下面是我寫的,是那個意思,但是沒有考慮變量類型.
 按節(jié)點——>鏈表過程建立
 move_one_step向后移動一步,返回一個結(jié)點的值以及指針的位置
 
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ù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖
                            
總結(jié)
                            
                                以上是生活随笔為你收集整理的2. 两数相加(中等)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。