/**66. Plus One
* @param digits
* @return 模拟大数+1
*/
public int[]
plusOne(
int[] digits) {
int one =
1;
int i;
for(i = digits.length-
1; i >=
0; i--) {
int sum = digits[i] + one;
if (sum >
9) {
digits[i] = sum-
10;
one = sum/
10;
}
else {
digits[i] = sum;
one =
0;
}
}
if (i == -
1 && one ==
1) {
int[] nums =
new int[digits.length+
1];
for(
int j = nums.length-
1; j >
0; j--) {
nums[j] = digits[j-
1];
}
nums[
0] = one;
return nums;
}
return digits;
}
先对原数组进行处理。从数组最后一位开始往前检查,如果当前数字是<9的,说明你加1无需进位,从循环跳出即可,如果当前数字等于9,说明加1涉及进位,且加1后当前数字应记为0,继续循环处理。
当对原数组处理完后,还需要判断当前第0位是不是已经变为0了,如果已经变为0了说明是类似99+1这种,需要进位。其他则不需要。
一般对数字进行操作的题都要考虑边界,尤其是溢出问题。
转载请注明原文地址: https://ju.6miu.com/read-9939.html