本题需要考虑的一个关键问题就是,某一位加1,是否这一位数刚好是9,那么则需要进位。
最开始的思路是,先把数组的数全部读出来,还原成一个新的数字,然后再把这个数字拆分存进数组,不过这个导致的问题就是数组太大,反而不能正确的计算出该数字。
public class ArrayDemo {
public static void main(String[] args) {
int[] digits = {9,8,7,6,5,4,3,2,1,0};
int sum = 0;
for (int i = 0; i < digits.length; i++) {
sum += digits[i] * Math.pow(10, (digits.length - 1 - i));
}
sum += 1;
System.out.println(sum);
String numInString = Integer.toString(sum);
if (numInString.length() > digits.length) {
digits = new int[digits.length + 1];
}
for (int i = 0; i < digits.length; i++) {
digits[i] = numInString.charAt(i) - '0';
}
}
}
所以参考了评论区大神的解法:
class Solution {
public int[] plusOne(int[] digits) {
for (int i = digits.length - 1; i >= 0; i--) {
digits[i]++;
digits[i] = digits[i] % 10;
if (digits[i] != 0) return digits;
}
digits = new int[digits.length + 1];
digits[0] = 1;
return digits;
}
}
其实精髓两个地方,最后一位加1以后,如果除余以后是0,说明该进位,下一位就要进1,以此循环;另外,后面的数组长度加1,其实就是类似99,999等情况,且后面新加的长度,那儿默认是0.