[leetCode]66. 加一
解法
数组每一位只能包含一位数字,只有当数字大于9时才会产生进位,所以只需要从后往前遍历,每次加上进位,当下一位需要进位时j
置一,否则置0。循环结束时如果首位为0则需要扩容数组并将首位置1。
class Solution {
public int[] plusOne(int[] digits) {
int len = digits.length;
int j = 1;//进位
for(int i = len - 1; i >= 0; --i){
digits[i]+=j;
if(digits[i]>9){//判断下一位是否需要进位
digits[i] = digits[i] % 10;
j = 1;
}else{
j = 0;
}
}
if(digits[0] == 0){//最高位为0则需要扩容数组
digits = new int[len + 1];
digits[0] = 1;
}
return digits;
}
}
下面这种方法思路差不多,但是写法更优雅,使用当前位取余后是否为0来判断下一位是否需要进位。
class Solution {
public int[] plusOne(int[] digits) {
int len = digits.length;
for(int i = len - 1; i >= 0; --i){
digits[i]++;
digits[i]%=10;//digits[i]< 10则保持不变,>10 取余数
if(digits[i] !=0 )return digits;//判断下一位是否需要+1,digits[i]!=0说明没有产生进位
}
digits = new int[len + 1];
digits[0] = 1;
return digits;
}
}