1. 程式人生 > 其它 >66. 加一

66. 加一

技術標籤:LeetCode加一LeetCode

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

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

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

示例1:輸入:digits = [1,2,3]
輸出:[1,2,4]
解釋:輸入陣列表示數字 123。
示例2:輸入:digits = [4,3,2,1]
輸出:[4,3,2,2]
解釋:輸入陣列表示數字 4321。
示例 3: 輸入:digits = [0]
輸出:[1]

提示: 1 <= digits.length <= 100

0 <= digits[i] <= 9

思路: 這道題有兩個邊界[9, 9, 9], [0, 0, 0, 1]

這道題的直接思路就是轉換成字串, 拼接, 轉換成int加1, 轉字串, 再分割 如下圖

[1, 2, 3]-->['1', '2', '3']-->'123'-->123-->124-->'124'-->['1', '2', '4']

但是有個問題就是[0, 0, 0, 1]的情況很難轉換, 所以使用列表倒序進行一一操作

第一版程式碼

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        digits.reverse()
        flag = 0
        for i in range(len(digits)):
            if i == 0:
                digits[i] += 1
            else:
                digits[i] += flag
                flag = 0

            if digits[i] == 10:
                digits[i] = 0
                flag = 1
            else:
                break
        if flag == 1:
            digits.append(1)
        digits.reverse()
        return digits