# 加一

<p>给定一个由 <strong>整数 </strong>组成的<strong> 非空</strong> 数组所表示的非负整数，在该数的基础上加一。</p><p>最高位数字存放在数组的首位， 数组中每个元素只存储<strong>单个</strong>数字。</p><p>你可以假设除了整数 0 之外，这个整数不会以零开头。</p><p><strong>示例 1：</strong></p><pre><strong>输入：</strong>digits = [1,2,3]<strong><br />输出：</strong>[1,2,4]<strong><br />解释：</strong>输入数组表示数字 123。</pre><p><strong>示例 2：</strong></p><pre><strong>输入：</strong>digits = [4,3,2,1]<strong><br />输出：</strong>[4,3,2,2]<strong><br />解释：</strong>输入数组表示数字 4321。</pre><p><strong>示例 3：</strong></p><pre><strong>输入：</strong>digits = [0]<strong><br />输出：</strong>[1]</pre><p><strong>提示：</strong></p><ul>	<li><code>1 <= digits.length <= 100</code></li>	<li><code>0 <= digits[i] <= 9</code></li></ul>
<p>以下<span style="color:red">错误</span>的选项是？</p>

## aop

### before

```c
#include <bits/stdc++.h>
using namespace std;
```

### after

```c
int main()
{
    Solution sol;
    vector<int> digits = {4, 3, 2, 1};
    vector<int> res;
    res = sol.plusOne(digits);
    for (auto i : res)
        cout << i << " ";
    return 0;
}
```

## 答案

```c
class Solution
{
public:
    vector<int> plusOne(vector<int> &digits)
    {
        int carrybit = 0, n = digits.size();
        vector<int> ans, t(n, 0);
        for (int i = n - 1; i >= 0; --i)
        {
            t[i] = (digits[i] + carrybit) % 10;
            carrybit = (digits[i] + carrybit) / 10;
        }
        if (carrybit)
        {
            ans.push_back(1);
        }
        for (int i = 0; i < n; ++i)
            ans.push_back(t[i]);
        return ans;
    }
};
```
## 选项


### A

```c
class Solution
{
public:
    vector<int> plusOne(vector<int> &digits)
    {
        int len = digits.size() - 1;
        for (; len > 0 && digits[len] == 9; --len)
        {
            digtis[len] = 0;
        }
        if (len == 0 && digits[0] == 9)
        {
            digits[0] = 0;
            digits.insert(digits.begin(), 1);
        }
        else
        {
            ++digits[len];
        }
        return digits;
    }
};
```

### B

```c
class Solution
{
public:
    vector<int> plusOne(vector<int> &digits)
    {
        int i = 0;
        int size = digits.size();
        for (i = size - 1; i >= 0; i--)
        {
            digits[i]++;
            digits[i] = digits[i] % 10;
            if (digits[i] != 0)
                return digits;
        }
        if (i == -1)
        {
            digits.insert(digits.begin(), 1);

            digits[size] = 0;
        }
        return digits;
    }
};
```

### C

```c

class Solution
{
public:
    vector<int> plusOne(vector<int> &digits)
    {
        int len = digits.size() - 1;
        for (int i = len; i >= 0; i--)
        {

            if ((digits[i] + 1 == 10 && i == len) || digits[i] >= 10)
            {
                digits[i] = 0;
                if (i == 0)
                {
                    digits.insert(digits.begin(), 1);
                }
                else
                {
                    digits[i - 1] += 1;
                }
            }

            else
            {
                if (i == len)
                {
                    digits[i] += 1;
                }
                break;
            }
        }
        return digits;
    }
};
```
