使用carry位模拟位运算,carry为0或1判断终止或是进位
逆置数组简化思路
class Solution {
public void reverse(int[] nums){
int i = 0;
int j = nums.length - 1;
while(i < j){
int t = nums[i];
nums[i] = nums[j];
nums[j] = t;
i ++;
j --;
}
return ;
}
public int[] plusOne(int[] digits) {
reverse(digits);
int n = digits.length;
int carry = 1;
for(int i = 0; i < n; i ++){
if(digits[i] + carry == 10){
digits[i] = 0;
carry = 1;
}
else{
digits[i] ++;
carry = 0;
break;
}
}
if(carry == 0){
reverse(digits);
return digits;
}
else{
int res[] = new int [n+1];
for(int i = 0; i < n; i ++){
res[i] = digits[i];
}
res[n] = 1;
reverse(res);
return res;
}
}
}
简化
只需反向遍历即可,无需逆置数组
找 digit = 9 即为找 digit + carry = 10,直接改0
极端情况下全数组为9,加1后全数组为0,因此新建n+1长度的数组,首位设为1
class Solution {
public int[] plusOne(int[] digits) {
int n = digits.length;
for(int i = n-1; i >= 0; i --){
if(digits[i] == 9){
digits[i] = 0;
}
else{
digits[i] ++;
break;
}
}
if(digits[0] == 0){
digits = new int [n+1];
digits[0] = 1;
//int res[] = new int [n+1];
//res[0] = 1;
//本质为定义新数组,初始化都为0
}
return digits;
}
}