力扣 题目66- 加一

题目


题解

可以看成两种情况

1.+1

后一位+1 如果等于10 取0 前一位+1

2.扩充

第一位+1 等于10 取0 插入1在开头

因此我们只需要一个变量记录是否进位了这题就会简单很多

就不多说了 代码已经能够看懂

代码

 1 #include<iostream>
 2 #include<vector>
 3 #include<map>
 4 #include<algorithm>
 5 using namespace std;
 6 int plusTwo(vector<int>& digits,int end,int site,bool carry) {
 7     //判断是否遍历完了还有进位 有则开头直接插入1
 8     if (carry&& site==-1) {
 9         digits.insert(digits.begin(), 1);
10         return 0;
11     }
12     //有进位
13     if (carry) {
14         //进位为0
15         carry = 0;
16         //进行+1
17         digits[site]  = digits[site]+1;
18         //判断是否进位
19         carry = digits[site] / 10;
20         //由于10不能取 所以直接%10
21         digits[site] = digits[site] % 10;
22         //递归
23         plusTwo(digits, end, site-1, carry);
24     }
25     return 0;
26 }
27 class Solution {
28 public:
29     vector<int> plusOne(vector<int>& digits) {
30         int end = digits.size()-1;
31         plusTwo(digits,end,end,1);
32         return digits;
33     }
34 };
35 int main() {
36     Solution sol;
37     vector<int> digits = { 9, 9, 8 };
38     vector<int>result=sol.plusOne(digits);
39     for (int i = 0; i < result.size(); i++) {
40         cout << result[i] << endl;
41     }
42 }
View Code

 

posted @ 2022-06-04 11:52  无聊的阿库娅  阅读(20)  评论(0编辑  收藏  举报