66. 加一

keybot
1
2025-08-20

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 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;
    }
};