题目描述

分析
拿到这题我最初的思路是把数组中的数据取出来得到一个整数,然后对整数加一再还原得到数组,在这种情况下,需要把变量设置为long,可即便如此还是会有高位错误的问题发生(当数组长度长一些的时候),所以这种方法没有最终被采纳。其实最简单的方法是直接对数组参数修正赋值,可是其中也有一个坑,就是可能会发生数组长度改变的情况(当第一个数为9且需要进位),在这种情况下我采取的措施是造一个新的数组,把原数组的值赋值过来再更新引用。整个参数调整过程是通过一个下标的移动和while循环判断完成的。
代码实现
class Solution {
public int[] plusOne(int[] digits) {
int i=digits.length-1;
int temp = 1;
while (digits[i] + temp == 10) {
if (i == 0) {
int[] newDig = new int[digits.length+1];
for(int j=digits.length-1;j>0;j--) {
newDig[j+1] = digits[j];
}
digits = newDig;
break;
}
digits[i] = 0;
i--;
}
digits[i] += 1;
return digits;
}
}
博客围绕LeetCode 66题“加一”展开。最初思路是将数组数据转为整数加一再还原,但因高位错误未采纳。最终采用直接对数组参数修正赋值的方法,考虑到数组长度可能改变的情况,通过造新数组、更新引用,利用下标移动和while循环完成参数调整。

被折叠的 条评论
为什么被折叠?



