给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
提示:
1 <= digits.length <= 100
0 <= digits[i] <= 9
思路
最后一位加一只有两种情况
- 不是 9 是单纯加一即可
- 是 9 时需要考虑进位
同时需要判断数组增加一位的情况
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* plusOne(int* digits, int digitsSize, int* returnSize) {
digits[digitsSize - 1]++;
for (int i = digitsSize - 1; i >= 0; i--) {
if (digits[i] > 9 && i > 0) {
digits[i] %= 10;
digits[i - 1]++;
} else
break;
}
if (digits[0] > 9) {
int* res = (int*)malloc(sizeof(int) * (digitsSize + 1));
res[0] = 1;
digits[0] %= 10;
for (int i = 0; i < digitsSize; i++) {
res[i + 1] = digits[i];
}
*returnSize = digitsSize + 1;
return res;
}
*returnSize = digitsSize;
return digits;
}
class Solution
{
public:
vector<int> plusOne(vector<int> &digits)
{
digits[digits.size() - 1] += 1;
for (int i = digits.size() - 1; i >= 0; i--)
{
if (digits[i] >= 10)
{
digits[i] -= 10;
if (i > 0)
{
digits[i - 1] += 1;
}
else
{
vector<int> ans(digits.size() + 1);
ans[0] = 1;
return ans;
}
}
}
return digits;
}
};