力扣066 加一

2021-10-11 12:26:38 字數 2642 閱讀 5835

給定乙個由 整數 組成的 非空 陣列所表示的非負整數,在該數的基礎上加一。

最高位數字存放在陣列的首位, 陣列中每個元素只儲存單個數字。

你可以假設除了整數 0 之外,這個整數不會以零開頭。

輸入:digits = [1,2,3]

輸出:[1,2,4]

解釋:輸入陣列表示數字 123。

輸入:digits = [4,3,2,1]

輸出:[4,3,2,2]

解釋:輸入陣列表示數字 4321。

輸入:digits = [0]

輸出:[1]

1、常規法

本題的常規解題思路是從後往前遍歷陣列,遇到不等於 9 的元素就+1然後退出,遇到 9 則將 9 變為 0 ,然後繼續遍歷,知道遇到非9元素為止。

值得注意的是,當我們遍歷到陣列的首元素為 9 時,此時已經沒有前乙個元素讓我們繼續遍歷了,因此我們需要額外插入乙個 1 在陣列開頭,這可以視為特殊情況單獨考慮。

2、取巧法

利用python靈活的型別轉換,雖然給我們的是乙個列表,但讓我們做的操作確是數字的加法,因此考慮將列表代表的數字轉換成int型別的真數字,+1後再轉回列表即可。

難點是能不能正確地做出型別轉換:

1)整型元素轉字串元素

[1, 2, 3] ——> [『1』, 『2』, 『3』]

2)字串元素拼接成整個字串數字

[『1』, 『2』, 『3』] ——> 『123』

3)字串數字轉整型數字

『123』 ——> 123

4)+1

123 ——> 124

5)整型數字轉字串數字

124 ——> 『124』

6)字串數字分散存放在列表中

『124』 ——> [『1』, 『2』, 『4』]

7)字串列表轉整型列表

[『1』, 『2』, 『4』] ——> [1, 2, 4]

1、常規法

class

solution

:def

plusone

(self, digits: list[

int])-

> list[

int]

:for i in

range

(len

(digits)-1

,-1,

-1):

if digits[i]!=9

: digits[i]+=1

break

elif digits[i]==9

and i ==0:

digits[i]=0

digits.insert(0,

1)else

: digits[i]=0

return digits

2、取巧法

class

solution

:def

plusone

(self, digits: list[

int])-

> list[

int]

:# 1

digits =

list

(map

(str

, digits)

)# 2 3

digit =

int(

''.join(digits)

)# 4

digit +=

1 reuslts =

list()

# 5 6

for d in

str(digit)

:# 7

return

list

(map

(int

, reuslts)

)

這裡的注釋,簡單地說明了取巧法每一步分別如何實現,需要注意的是,map()可以很方便地對序列進行批量操作(此處是批量型別轉換),但map函式並不是對引數序列進行操作的,而是返回乙個迭代器,因此呼叫map函式後,需要將map返回的迭代器再型別轉換成列表型別。

另外,題幹裡明明說了這樣一句話

你可以假設除了整數 0 之外,這個整數不會以零開頭。

但是測試用例中卻有這樣乙個用例:

這個操作實在是看不懂。如果考慮這樣的測試用例,那麼只有常規法可以通過,取巧法是通不過這個用例的,但是其他正常一點的用例用取巧法是沒問題的。

正因為如此,我才把這種方法叫做取巧法,因為畢竟這種方法不是出題人的本意。掌握常規法才是正道。

力扣日記 066 加一

給定乙個由整數組成的非空陣列所表示的非負整數,在該數的基礎上加一。最高位數字存放在陣列的首位,陣列中每個元素只儲存單個數字。你可以假設除了整數 0 之外,這個整數不會以零開頭。方法一 class solution def plusone self,digits i 1 while digits i ...

力扣 題目66 加一

可以看成兩種情況 1.1 後一位 1 如果等於10 取0 前一位 1 2.擴充 第一位 1 等於10 取0 插入1在開頭 因此我們只需要乙個變數記錄是否進製了這題就會簡單很多 就不多說了 已經能夠看懂 1 include2 include3 include4 include5 using names...

66 加一 力扣(LeetCode)

給定乙個由整數組成的非空陣列所表示的非負整數,在該數的基礎上加一。最高位數字存放在陣列的首位,陣列中每個元素只儲存單個數字。你可以假設除了整數 0 之外,這個整數不會以零開頭。示例 1 輸入 1,2,3 輸出 1,2,4 解釋 輸入陣列表示數字 123。示例 2 輸入 4,3,2,1 輸出 4,3,...