目錄
- 1.題目
- 2.思路
- 3.代碼實作(Java)
1.題目
給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。
最高位數字存放在數組的首位,數組中每個元素隻存儲單個數字。
你可以假設除了整數 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
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/plus-one
2.思路
(1)分析題目可知,該整數在加一時,主要有以下兩種情況:
(1.1)個位上的數字不為9,那麼直接将個位上的數字 digits[digits.length-1] 加一,并且傳回 digits 數組即可;
(1.2)個位上的數字為9,那麼此時則需要考慮進位的問題:
先将個位上的數字 digits[digits.length-1] 指派為 0 ,然後再依次判斷高一位的數字是否也為9:
如果為9,則将其設定為0,繼續判斷更高位,直到将數組 digits 從後往前周遊結束或者高位數字不為 9 為止;
如果不為9,則将其加一然後直接退出循環;
退出循環後,若周遊數組 digits 的下标 length < 0,則說明數組中每個元素值都為9,即[9,…,9],該整數加一之後等于10…0,存儲該整數的數組長度應等于在原來的數組digits的長度基礎上再加一,是以此時建立長度為 digits.length+1 的數組res,并且設定res[0]=1,然後傳回res;若length ≥ 0,直接傳回數組 digits 即可。
3.代碼實作(Java)
//(1)思路1
public int[] plusOne(int[] digits) {
int length = digits.length;
if(digits[length-1]!=9){
//個位上的數字不為9
digits[length-1]++;
return digits;
}else{
//個位上的數字為9
digits[length-1]=0;
length-=2;
while(length>=0){
if(digits[length]==9){
//高一位也為9,将其設定為0
digits[length]=0;
//繼續判斷更高位
length--;
}else{
//高一位不為9,将其加一然後直接退出循環
digits[length]++;
break;
}
}
if(length<0){
//length<0說明數組中每個元素值都為9,即[9,...,9]
//該整數加一之後等于10...0,存儲該整數的數組長度應等于在原來的數組digits的長度基礎上再加一
int[] res = new int[digits.length+1];
//設定最高位為1即可,其餘位的值均為0
res[0]=1;
return res;
}else{
return digits;
}
}
}