leetcode騰訊精選練習50(1) 兩數相加

2021-09-26 12:56:00 字數 1727 閱讀 3101

這是一道來自leetcode的演算法題目。

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

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

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

示例:

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

輸出:7 -> 0 -> 8

原因:342 + 465 = 807

和基礎的四則運算的思路一樣,由於是逆序方式儲存的單數字,從頭節點同時開始遍歷鍊錶,即從個位開始相加,還要注意進製問題,可以用乙個標記整數變數carry,carry為0即不進製。

建立結果頭節點,建立兩個新指標p,q分別指向已知鍊錶;

初始化標記進製的變數carry為0;

判斷p,q是否不全為空,是則進入迴圈,遍歷鍊錶,即進行第4步,否則跳出迴圈,即進行第8步;

建立兩個變數x,y,如果當前節點為空(null)則變數賦為0,否則賦予當前節點的值(val);

建立乙個臨時變數sum,sum=x+y+carry;

判斷是否需要進製,實際過程中carry=sum/10即可解決,不需判斷是否大於10;

指向下一節點,進行第3步;

判斷是否需要再進製;

返回結果;

/**

* definition for singly-linked list.

* */

public

class

listnode

}class

solution

if(carry>0)

return result.next;

}}

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

dummyhead = listnode(0)

curr, carry = dummyhead,

0while l1 or l2:

sum=

0if l1:

sum+= l1.val

l1 = l1.

next

if l2:

sum+= l2.val

l2 = l2.

next

sum+= carry

carry =

sum//

10 curr.

next

= listnode(

sum%10)

curr = curr.

next

if carry >0:

curr.

next

= listnode(1)

return dummyhead.

next

;

Leetcode騰訊精選練習2

原題 兩個大小為 m 和 n 的排序陣列 nums1 和 nums2 請找出兩個排序陣列的中位數並且總的執行時間複雜度為 o log m n 示例 1 nums1 1,3 nums2 2 中位數是 2.0 示例 2 nums1 1,2 nums2 3,4 中位數是 2 3 2 2.5 看到這題目自然...

Leetcode騰訊精選練習04

原題 leetcode7 給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1...

Leetcode騰訊精選練習05

請你來實現乙個atoi函式,使其能將字串轉換成整數。首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。當我們尋找到的第乙個非空字元為正或者負號時,則將該符號與之後面盡可能多的連續數字組合起來,作為該整數的正負號 假如第乙個非空字元是數字,則直接將其與之後連續的數字字元組...