牛客-加一

本文最后更新于:2022年6月20日 晚上

题目:
给出用数字数组表示的一个非负整数,请对该整数加1。

输入:

[1,2,3]

输出:

[1,2,4]

题意:给一个数组,一个数组整体代表一个数字,然后对该数字+1,也就是对数组的最后一个元素+1,其中涉及到了进位的处理。

核心代码模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public:
/**
*
* @param digits int整型vector
* @return int整型vector
*/
vector<int> plusOne(vector<int>& digits) {
int num = 1;
int carry = num; // 保存进位,初始时,进位就是要加的数1
for (int i = digits.size() - 1; i >= 0; i--)
{
digits[i] += carry; // 进行加法操作
carry = digits[i] / 10; // 求加完后的进位是多少
digits[i] = digits[i] % 10; // 取模,求去除进位后的数字大小
}
// 如果最后计算的一位仍有进位1, 就在数组首部插入1
if (carry == 1)
digits.insert(digits.begin(), 1);
return digits;
}
};

ACM模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;

int main()
{
vector<int> digits;
int n;
cin >> n;
for(int i = 0; i < n; i++)
{
int x;
cin >> x;
digits.push_back(x);
}

int num = 1;
int carry = num; // 进位
for (int i = digits.size() - 1; i >= 0; i--)
{
digits[i] += carry;
carry = digits[i] / 10;
digits[i] = digits[i] % 10;
}
// 如果最后计算的一位仍有进位1, 就在数组首部插入1
if (carry == 1) digits.insert(digits.begin(), 1);

for(int i = 0; i < digits.size() ; i++) cout << digits[i] << " ";
return 0;
}