【LeetCode】加一
阿新 • • 發佈:2018-12-12
文章目錄
題目
給定一個由整陣列成的非空陣列所表示的非負整數,在該數的基礎上加一。 最高位數字存放在陣列的首位, 陣列中每個元素只儲存一個數字。 你可以假設除了整數 0 之外,這個整數不會以零開頭。
示例
示例1
輸入: [1,2,3] 輸出: [1,2,4] 解釋: 輸入陣列表示數字 123。
示例2
輸入: [4,3,2,1] 輸出: [4,3,2,2] 解釋: 輸入陣列表示數字 4321。
簡析
- 用了直接的方法,直接模擬加法,有個特殊點就是考慮最高為進1,陣列的長度增加1。
- 提交後發現了網友一個更簡潔的方法,只需要判斷當前位是否是9,如果不是直接+1返回,否則當前位置0,下一位接著這個判斷,下一位的+1相當於加前一位的進位。至於特殊情況,發生時,除了最高位其他都是0,所以也不必拿原陣列複製,直接把下標為0的位子置1即可。
程式碼
public static int[] plusOne(int[] digits) {
//解法1
boolean flag = false;
for (int i = digits.length - 1; i >= 0; i--){
int temp = digits[i] + 1;
digits[i] = temp % 10;
if (i == 0 && temp / 10 > 0){
flag = true;
}
if (temp / 10 == 0) {
break;
}
}
if (flag){
int[] result = new int[digits.length+1];
for (int i = 0; i < digits.length; i++) {
result[i+1] = digits[i];
}
result[0] = 1;
return result;
}
return digits;
}
public int[] plusOne(int[] digits)
{
int n = digits.length;
for (int i=n-1; i>=0; i--)
{
if(digits[i] < 9)
{
digits[i]++;
return digits;
}
digits[i] = 0;
}
int[] newdigits = new int[n+1];
newdigits[0] = 1;
return newdigits;
}