问题描述:对于一个多位的十进制数,用数组保存它的每一位。当这个10进制数加1时,返回新的数组。
解决:这题麻烦的地方在于处理进位。我们可以用一个临时变量来保存进位的值,当进位为0时立即停止运算直接返回,当进位为1则任然需要计算。举例:9+1 = 10。
我需要保存两个变量,一个是进位值carry=1。一个是加1操作后位上的新元素=0。如果遍历完数组仍然carry=1,表明这个数是99999...的形式,原数组长度不够用,需要
新建一个length+1长度的数组,第0位置1返回。
public class PlusOne {
public int[] plusOne(int[] digits) {
if(digits == null || digits.length == 0) {
return null;
}
int length = digits.length;
int carry = 1; //进位,一旦为0立即返回
for(int i=length-1; i>=0; i--) {
int sum = digits[i] + carry;
digits[i] = sum%10;
carry = sum/10;
if(carry == 0) {
return digits;
}
}
int[] rtn = new int[length+1];
rtn[0] = 1;
return rtn;
}
}