题目: 有一个用int数组表示的数字 digits, 求digits 加一运算后的int数组?
例如 :digits ={1,0} , 加一运算后就是 {1,1}; digits= {9,9}, 加一运算后就是{1,0,0}
思路:一般情况下,直接使用digits[digits.length-1]++,就可以了,但是如果末尾是9的话,必须给这个数字前一位加1,最麻烦就是第一位也是9,那么这个数组长度就需要加一了,所以,只要设置一个boolean型来监控当前这位是否超过9。
public int[] plusOne(int[] digits) {
if (digits.length < 1)
return digits;
boolean flag = false; //判断当前是否超过9;
int index = digits.length - 1;
int i = digits[index] + 1;
digits[index]++;
if (i >= 10) {
flag = true;
digits[index] = digits[index] - 10;
} else {
return digits;
}
for (int j = index - 1; j > -1; j--) {
int k = ++digits[j];
if (k < 10) {
flag = false;
break;
} else {
digits[j] -= 10;
}
}
if (flag) {
int[] newdigits = new int[digits.length + 1];
newdigits[0] = 1; //超过第一位9的话,需要前面进一位。
for (int k = 0; k < digits.length; k++) {
newdigits[k + 1] = digits[k];
}
return newdigits;
}
return digits;
}