先看一个用数组实现逐个加一的问题。LeetCode66.具体要求是由整数组成的非空数组所表示的非负整数,在其基础上加一。这里最高位数字存放在数组的首位,数组中每个元素只存储单个数字。并且假设除了整数0之外,这个整数不会以零开头。例如:
输入:digits=[1,2,3] 输出:[1,2,4] 解释:输入数组表示数字123。
public static int[] plusOne(int[] digits) {
int len = digits.length;
for (int i = len - 1; i >= 0; i--) {
digits[i]++;
digits[i] %= 10;
if (digits[i] != 0) {
return digits;
}
}
// 比较巧妙的设计
digits = new int[len + 1];
digits[0] = 1;
return digits;
}
这里从最右边开始处理,直接给当前元素加一,再让当前位置的元素对10求模,如果经过这样的处理后当前位置的元素不等于0,那就说明当前位置原来的元素加一小于10,那么直接返回数组,就结束了。
如果经过这样的处理后当前位置的元素等于0,那就说明当前位置原来的元素加一大于等于10,那么继续进行循环就可以了。
如果能执行到循环下边的代码,就说明加一后的元素个数比原来的元素个数多一位,将数组大小+1,让最左边一位等于1,返回。