Given a non-negative number represented as an array of digits, plus one to the number.
The digits are stored such that the most significant digit is at the head of the list.
题目的意思就是把这个数组代表的大数字加一,然后考虑进位的问题,如果都是9就要考虑加一位的问题。这是一个处理大数据的办法,当数字超出了整型的长度,我们就可以用这种办法。我们需要处理的就是进位问题。
public int[] plusOne(int[] digits) {
int flag = 1, sum;
for (int i = digits.length - 1; i >= 0; i--) {
sum = digits[i] + flag;
digits[i] = sum % 10;
flag = sum / 10;
}
// 如果还有进位,我们就得在数组最前面加一个了
if (flag == 1) {
int[] newDigits = new int[digits.length + 1];
newDigits[0] = 1;
for (int i = 0; i < digits.length; i++) {
newDigits[i + 1] = digits[i];
}
return newDigits;
}
return digits;
}
其实呢,进位只有当时9的时候才会发生,所以我们也可以判断是否为9这样处理。
public int[] plusOne(int[] digits) {
for (int i = digits.length - 1; i >= 0; i--)
if (digits[i] == 9) {
digits[i] = 0;
} else {
digits[i]++;
return digits;
}
int[] newDigits = new int[digits.length + 1];
newDigits[0] = 1;
for (int i = 0; i < digits.length; i++) {
newDigits[i + 1] = digits[i];
}
return digits;
}