給定乙個由 整數 組成的 非空 陣列所表示的非負整數,在該數的基礎上加一。最高位數字存放在陣列的首位, 陣列中每個元素只儲存單個數字。
你可以假設除了整數 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』 ——> 1234)+1
123 ——> 1245)整型數字轉字串數字
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,...