1. 程式人生 > >leecode刷題(7)-- 加一

leecode刷題(7)-- 加一

leecode刷題(7)-- 加一

加一

描述:

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

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

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

示例1:

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

示例2:

輸入:[0, 9]

輸出:[1, 0]

解釋:輸入陣列表示數字 9。

思路:

我們從後往前遍歷陣列,當遍歷到最後一位的時候我們讓陣列的最後一位加 1,如果陣列的最後一位是 9 的話,則需要進位,該位賦值為 0 。如果前面位的陣列也是 9 的話,則需要繼續向前進位,繼續將 9 數字位賦值為 0 ,直至不再是 9 (當從後往前遍歷到不再是 9 後我們又能執行加 1 操作啦)。這裡有一個細節,如果陣列的第一位是 9 的話,加 1 後會產生新的一位,所以我們將該位賦值為 0 後還需要將陣列長度加 1 ,然後將 陣列[0] = 1。

程式碼如下:

import java.util.Arrays;

public class PlusOne {
    public int[] plusOne(int[] digits) {
        int n = digits.length;
        for (int i = digits.length - 1; i >= 0; --i) {
            if (digits[i] < 9) {
                ++digits[i];
                return digits;
            }
            digits[i] = 0;
        }
        int[] res = new int[n + 1];
        res[0] = 1;
        return res;
    }

    public static void main(String[] args) {
        int[] a = {1,2,9};
        PlusOne plusOne = new PlusOne();
        int[] b = plusOne.plusOne(a);
        System.out.println(Arrays.toString(b));
    }
}