NC180 给数组加一
描述
给定一个用数组表示的数字,即数组中每个数表示一个数位上的数,例如 [1,2,3],表示 123 ,请问给这个数字加一后得到的结果(结果同样以数组的形式返回)。
注意:数组中不可能出现负数,且保证数组的首位即数字的首位不可能是 0 。
数据范围: 数组长度满足 ,数组中每个数满足
示例1
输入:
[1,2,3]
返回值:
[1,2,4]
示例2
输入:
[1,9]
返回值:
[2,0]
示例3
输入:
[9]
返回值:
[1,0]
题解
很简单,从数组的最后一位开始进行加一,将相加的个位数原地放到nums上,初始设置进位标记为1,每次相加后再更新进位标记,如果进位标记为0则可以直接退出循环。
退出循环后,如果进位标记仍然是1,则需要在nums的前面再插入一个1。
代码如下:
#include <bits/stdc++.h>
using namespace std;
vector<int> plusOne(vector<int> &nums)
{
int carray = 1;
for (int i = nums.size() - 1; i >= 0; --i)
{
if (carray == 0)
{
break;
}
int t = carray + nums[i];
nums[i] = t % 10;
carray = t / 10;
}
if (carray == 0)
{
return nums;
}
std::vector<int> ans(nums.size() + 1);// 可以直接在nums的前面插入一个1,这里不必要重新申请内存的·~
ans[0] = 1;
for (int i = 0; i < nums.size(); ++i)
{
ans[i + 1] = nums[i];
}
return ans;
}