/**
*
* 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
* <p>
* 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
* <p>
* 你可以假设除了整数 0 之外,这个整数不会以零开头。
*
*/
/**
*
* @param digits 要进行加一运算的数组
* @return 返回计算后的结果
*/
public int[] plusOne(int[] digits) {
//定义变量 carry保存进位
int carry = 0;
//数字的最低位先加一
int sum = digits[digits.length - 1] + carry + 1;
//将计算的结果再保存到原位置
digits[digits.length - 1] = sum % 10;
//并保存计算后是否有进位
carry = sum / 10;
//然后从次低位开始计算,同样将计算的结果保存到原位置
for (int i = digits.length - 2; i >= 0; i--) {
digits[i] = sum % 10;
carry = sum / 10;
}
//循环结束后判断最高位有没有进位,如果没有进位,直接结束
if (carry == 0) {
return digits;
} else {
//如果有进位,需要将进位也加进去,需要创建一个新数组,保存最高位进位和低位结果
int[] arr = new int[digits.length + 1];
arr[0] = carry;
for (int i = 0, j = 1; i < digits.length; i++, j++) {
arr[j] = digits[i];
}
return arr;
}
}
原文:https://www.cnblogs.com/mx-info/p/14851908.html