JAVA解法
class Solution {
public int[] plusOne(int[] digits) {
// 获取数组长度
int n = digits.length;
// 从后开始,只要不是 9 就加一,不管有多少个 9 ,
// 都在最后一个 9 的前一个数加一即可
for (int i = n - 1; i >= 0; --i) {
if (digits[i] != 9) {
++digits[i];
for (int j = i + 1; j < n; ++j) {
digits[j] = 0;
}
// 返回结果集
return digits;
}
}
// 能到这里,说明 digits 中所有的元素均为 9
// 创建一个比原数组大小大一空间的新数组
int[] ans = new int[n + 1];
// 把第 0 个数置为 1 其他全为 0 即可
ans[0] = 1;
// 返回结果集
return ans;
}
}
题解分析
根据题目要求,我们先获取数组长度并赋值为 n,一个数的最低位在最左边,因此从最左边开始遍历。由于是进制数,因此要遇 9 进 1,假设有多个 9 如 136999 这种,就得连续进位,因此写进 for 循环,只要是 9 都跳过,直到遇到非 9 的数则加一,后边所有跳过的 9 全置为 0。
那还有一种情况就是给的数全部是 9 如 9999,那么它加一后是 10000,比原数组空间还大,因此要新建一个数组,长度为原数组长度加一,再将数组第 0 位置的数赋值为 1,其他默认为 0 即可。
leetcode原题:66. 加一
评论区