65.加一
题目描述
给定一个表示 大整数 的整数数组 digits,其中 digits[i] 是整数的第 i 位数字。这些数字按从左到右,从最高位到最低位排列。这个大整数不包含任何前导 0。
将大整数加 1,并返回结果的数字数组。
示例 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]。
特殊情况
digits = [9,9,9,9]
#include <vector>
using namespace std;
class Solution {
public:
vector<int> plusOne(vector<int>& digits)
{
int len = digits.size() - 1;
int flag = len;
// 找到第一个不是9的位置(从后往前)
while (flag >= 0 && digits[flag] == 9) // 添加flag >= 0防止越界
{
flag--;
}
if (flag < len) // 存在9,需要进位
{
if (flag == -1) // 特殊情况:所有数字都是9
{
// 原数组所有位都变为0,在开头添加1
for (int i = 0; i <= len; i++)
{
digits[i] = 0;
}
digits.insert(digits.begin(), 1); // 在开头插入1(正确处理最高位进位)
}
else // 部分数字是9
{
digits[flag] += 1; // 非9位加1
// 后面的9都变为0
for (int i = flag + 1; i <= len; i++)
{
digits[i] = 0;
}
// 这里移除了错误的push_back(0),避免越界
}
}
else // 末尾不是9,直接加1
{
digits[len] += 1;
}
return digits;
}
};

浙公网安备 33010602011771号