題目
給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。
最高位數字存放在數組的首位, 數組中每個元素只存儲單個數字。
你可以假設除了整數 0 之外,這個整數不會以零開頭。
示例 1:
輸入: [1,2,3] 輸出: [1,2,4] 解釋: 輸入數組表示數字 123。
示例 2:
輸入: [4,3,2,1] 輸出: [4,3,2,2] 解釋: 輸入數組表示數字 4321。
解法
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
ind = 0
for i in range(1, len(digits)+1):
if digits[-i] == 9:
ind = -i
else:
break
if ind == 0:
digits[-1] += 1
return digits
elif ind == -len(digits):
a = [0] * len(digits)
a.insert(0, 1)
return a
else:
a = digits[:ind]
a[-1] += 1
a = a + [0] * abs(ind)
return a
解題思路:
首先分析出這是個什麼類型的題目,需要利用什麼方法。我會想到先將加1
分爲以下三種情況:
- digits全爲9;
- digits尾部有連續的9,但是不全爲9。例如1699;
- digits個位數不爲9,例如1931.
這其中9的位置至關重要,因此可以通過指針定位連續9的最高位。然後針對不同情況,進行計算。
鏈接:https://leetcode-cn.com/problems/plus-one