1. 程式人生 > >LeetCode——66. 加一

LeetCode——66. 加一

題目

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

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

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

示例 1:

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

示例 2:

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

解題思路 

1、從陣列的最後一位往前遍歷(不包括第一位),如果後一位元素大於等於10則前一位元素加1,該元素減10(已經進位)。

2、單獨判斷第一位是否大於等於10,如果大於等於10給一個訊號(isOver)。

3、 如果接受到資訊(isOver)表示第一個元素需要進位,這時建立長度比原陣列大一的陣列。該陣列第一位為1,剩下的元素從原陣列複製。

程式碼實現

class Solution {
    public int[] plusOne(int[] digits) {
        int N = digits.length;
        Boolean isOver  = false;

        digits[N-1] = digits[N-1] + 1;
        for (int i = N - 1; i > 0; i--) {
            if (digits[i] >= 10) {
                digits[i-1] = digits[i-1] + 1;
                digits[i] = digits[i] - 10;
            }
        }
        if (digits[0] >= 10) {
            isOver = true;
        }
            
        if (isOver) {
            int[] news = new int[N+1];
            news[0] = 1;
            digits[0] = digits[0] - 10;
            for (int i = 1; i < news.length; i++) {
                news[i] = digits[i-1];
            }
            return news;
        }
        return digits;
    
    }
}