leetcode-66-加1

題目

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

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

你可以假設除了整數 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章