大数加1
题目描述
给定一个表示 大整数 的整数数组 digits,其中 digitsi 是整数的第 i 位数字。这些数字按从左到右,从最高位到最低位排列。这个大整数不包含任何前导 0。
将大整数加 1,并返回结果的数字数组。
示例
bash
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
加 1 后得到 123 + 1 = 124。
因此,结果应该是 [1,2,4]。
示例 2:
输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。
加 1 后得到 4321 + 1 = 4322。
因此,结果应该是 [4,3,2,2]。
示例 3:
输入:digits = [9]
输出:[1,0]
解释:输入数组表示数字 9。
加 1 得到了 9 + 1 = 10。
因此,结果应该是 [1,0]。
提示:
1 <= digits.length <= 100
0 <= digits[i] <= 9
digits 不包含任何前导 0。
算法实现
使用java实现的算法如下:
java
public int[] plusOne(int[] digits) {
int index = digits.length - 1;
while (index >= 0) {
int sum = digits[index] + 1;
if (sum != 10) {//说明不满足进1,则退出循环
digits[index] =sum;
break;
}
//如果==10 满足进1,则设置为0
digits[index] = 0;
if (index - 1 < 0) {//判断数组是否越界
break;
}
int preIndex = index-1;//计算前一个数目
digits[preIndex] += 1;//上一个+1,这个+1是进位导致
if (digits[preIndex] != 10) {//说明不满足进1,则退出循环
break;
}
//满足进1,则设置为0
digits[preIndex] = 0;
//计算preIndex的上一位
index-=2;//注意是-2,不是-1
} // end while
if (digits[0] == 0) {//说明原数组全部元素是9
int[] result = new int[digits.length + 1];
result[0] = 1;
return result;
}
return digits;
}