ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 一.题目描述 Given a number represented as an array of digits, plus one to the number. ## 二.题目分析 一道高精度计算的题,从低位到高位进行计算,同时考虑进位的问题,若最高位计算结果还有进位,就需要在最高位前面添加一位。可做到时间复杂度为O(n),空间复杂度为O(1)。 这道题应该算是简化版,因为要求只是对一个数加1,如果任何一位的运算没有进位,则更高位也不需要进行进位处理了,可以直接输出结果。 ## 三.实例代码 ~~~ #include <iostream> #include <vector> using namespace std; class Solution { public: void plusOne(vector<int>& digits) { int carry = 1; const int digitsSize = digits.size(); for (int i = digitsSize - 1; i >= 0; i--) { digits[i] += carry; if (digits[i] < 10) { carry = 0; break; } carry = digits[i] / 10; digits[i] %= 10; } if (carry != 0) // 若最高位运算仍有进位,则需新增一位并置1 digits.insert(digits.begin(), carry); } }; ~~~ 两个运行结果: ![](https://box.kancloud.cn/2016-01-05_568bb5ebbc1d9.jpg) ![](https://box.kancloud.cn/2016-01-05_568bb5ebcb4f5.jpg) ## 四.小结 又是一道涉及位运算的题目,解决方法有多种,而且应该考虑plus不同的值时,又该怎么处理。