力扣 题目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 }