66. Plus One
题目大意
You are given a large integer represented as an integer array digits
, where each digits[i]
is the i
th digit of the integer. The digits are ordered from most significant to least significant in left-to-right order. The large integer does not contain any leading 0’s.
Increment the large integer by one and return the resulting array of digits.
中文释义
你有一个大整数,表示为整数数组 digits
,其中每个 digits[i]
是该整数的第 i
位数字。数字按从最高位到最低位的左到右顺序排列。该大整数不包含任何前导 0。
将大整数加一,并返回结果数字数组。
示例
示例 1:
输入: digits
= [1,2,3]
输出: [1,2,4]
解释: 数组表示整数 123。
加一得到 123 + 1 = 124。
因此,结果应为 [1,2,4]。
示例 2:
输入: digits
= [4,3,2,1]
输出: [4,3,2,2]
解释: 数组表示整数 4321。
加一得到 4321 + 1 = 4322。
因此,结果应为 [4,3,2,2]。
示例 3:
输入: digits
= [9]
输出: [1,0]
解释: 数组表示整数 9。
加一得到 9 + 1 = 10。
因此,结果应为 [1,0]。
限制条件
1 <= digits.length <= 100
0 <= digits[i] <= 9
digits
不包含任何前导 0。
解题思路
方法
该方法通过遍历并修改数组 digits
来实现大整数加一的操作。
-
初始化索引:
- 初始化索引
index
指向数组digits
的最后一个元素。
- 初始化索引
-
处理不是 9 的最后一位:
- 如果
digits[index]
小于 9,则直接对其加一并返回digits
。
- 如果
-
处理 9 的最后一位:
- 当
index
位置的数字为 9 时,将该位设为 0,并将索引向前移动一位。 - 继续检查前一位,直到找到一个不是 9 的数字或者遍历完所有数字。
- 当
-
处理进位:
- 如果遍历完所有数字都是 9,则在数组最前面添加 1,并将其余位数设为 0。
-
返回结果:
- 如果没有遍历完所有数字,则返回修改后的
digits
。 - 如果遍历完所有数字,则返回新构建的数组
ans
。
- 如果没有遍历完所有数字,则返回修改后的
代码
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int index = digits.size() - 1;
if (digits[index] < 9) digits[index]++;
else {
while (index >= 0 && digits[index] == 9) digits[index--] = 0;
if (index >= 0) {
digits[index]++;
} else {
vector<int> ans;
ans.push_back(1);
for (int i = 0; i < digits.size(); i++) ans.push_back(0);
return ans;
}
}
return digits;
}
};