給定一個非負整數組成的非空數組,在該數的基礎上加一,返回一個新的數組。
最高位數字存放在數組的首位, 數組中每個元素只存儲一個數字。
你可以假設除了整數 0 之外,這個整數不會以零開頭。
示例 1:
輸入: [1,2,3]
輸出: [1,2,4]
解釋: 輸入數組表示數字 123。
實例 2:
輸入: [4,3,2,1]
輸出: [4,3,2,2]
解釋: 輸入數組表示數字 4321。
分析:
這道題意思簡單,容易理解。數組中放著一個自然數的每一位,按照我們常書寫自然數的順序,從左到右。現在執行加1操作,得到新的自然數,題目要求放著新自然數的數組。
需要注意的是,如果數組最后一位是9的話,自身會變成0,而左邊的一位元素需要加1。如果整個數組都是9的話,需要創建一個新數組,因為數組長度增加了1。
如果把數組取出來還原成自然數,執行加1,再放進數組,那么太慢了。我們只需要根據剛才分析的內容,進行特殊處理即可。
Java解答如下:
public int[] plusOne(int[] digits) {
for (int i = digits.length - 1; i >= 0; i--) {
if (digits[i] == 9) {
digits[i] = 0;
} else {
digits[i] += 1;
return digits;
}
}
if (digits[0] == 0) {
int[] result = new int[digits.length + 1];
result[0] = 1;
return result;
}
return digits;
}
注:這種方法的速度非常快,平臺顯示耗時為0ms,是最快的方法。