python版 Leetcode 2 兩數相加

2021-10-24 02:32:53 字數 1995 閱讀 4600

鏈結

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

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

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

示例

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

輸出:7 -> 0 -> 8

.原因:342 + 465 = 807

首先,我們能想到的是依次取出鍊錶的value值,相加,存放在乙個新鍊錶 l3

其次,兩個是鍊錶的長度可能不等。需要考慮補零操作,補幾個?補到更長鍊錶的長度

然後,若相加大於10,當前位的取值,進製的1如何放置

最後,驗證最後一位相加是否需進一。需要的話,就在鍊錶最後新增乙個1

l3 是輸出鍊錶

carry 是進製數,兩個(0-9的)數相加,範圍在0 - 18,所以sum // 10向下取整的地板除,只能為0/1

sum % 10是當前位若大於10的餘數

# definition for singly-linked list.

# class listnode(object):

# def __init__(self, x):

# self.val = x

# self.next = none

class

solution

(object):

defaddtwonumbers

(self, l1, l2)

:"""

:type l1: listnode

:type l2: listnode

:rtype: listnode

"""head = listnode(0)

# 頭結點,無儲存,指向鍊錶第乙個結點

l3 = head # 初始化鍊錶結點

carry =

0# 初始化 進一 的數

while l1 or l2:

x = l1.val if l1 else

0# 這兩句if是補零操作

y = l2.val if l2 else

0sum

= x + y + carry # 對每一位求和

carry =

sum//

10# 地板除(向下取整),求進一(其為0或1)

l3.next

= listnode(

sum%10)

# 取餘數,求本位結點

if l1:

# 求空否,防止出現無後繼結點

l1 = l1.

next

if l2:

# 同上

l2 = l2.

next

l3 = l3.

next

# 更新指標

# l3儲存完畢

if carry !=0:

# 驗證最後一位相加是否需 進一

l3.next

= listnode(1)

return head.

next

# 返回頭結點的下乙個結點,即鍊錶的第乙個結點

參考鏈結:/solution/76ms137mb-by-yue-xia-gua-tian-de-run-tu/

leetcode佇列總結 python版

leetcode239 滑動視窗最大值 題目 給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。返回滑動視窗中的最大值。輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5...

LeetCode 選擇排序(python版)

選擇排序 其原理為從數列中選擇最小 最大 的數,將這個數放在合適位置,然後拋開這個數的子數列找到最小 最大 的數放到合適位置,然後一直到子數列為空為止,與冒牌排序稍微有不同的是,它不是相鄰的兩個數比較,而是某個數與數列中其他所有的數比較,挑出最小 最大 呢個數。import random impor...

LeetCode 分塊查詢(Python版)

分塊查詢部需要進行整理排序,首先按照一定的取值範圍將數列分成數塊,塊內的元素是可以無序的,但塊必須是有序的,其中塊的有序表示為處於後面位置中的塊的最小元素都要比前面位置塊中的最大元素大。第一次運算,key 250,0 從ilist裡面獲取資料,乙個個判斷是否在0 250之間 若滿足條件則將資料i儲存...