解法一 递归
class Solution {
private int[] plusOneAtIndex(int[] digits, int index){
//说明每一位都是9
if(index < 0){
//新建一个更大的数组,最高位赋值为1
int[] ans = new int[digits.length + 1];
ans[0] = 1;
return ans;
}
//如果当前位小于9,直接加1返回
if(digits[index] < 9){
digits[index] += 1;
return digits;
}
//当前位置为0
digits[index] = 0;
//给前一位加1
return plusOneAtIndex(digits, index - 1);
}
public int[] plusOne(int[] digits) {
return plusOneAtIndex(digits, digits.length - 1);
}
}
时间复杂度:O(n)
解法二 迭代
class Solution {
public int[] plusOne(int[] digits) {
//从最低位遍历
for(int i = digits.length - 1; i >= 0; i--){
//小于9直接加1
if(digits[i] < 9){
digits[i] += 1;
break;
}
//否则的话置为0
digits[i] = 0;
}
//最高位如果为0,说明最高位产生了进位
if(digits[0] == 0){
int[] ans = new int[digits.length + 1];
ans[0] = 1;
digits = ans;
}
return digits;
}
}
时间复杂度:O(n)