这是LEETCODE一道题目,对一个数组进行加一操作。思路是维护一个进位,对每一位进行加一,然后判断进位,如果有继续到下一位,否则就可以返回了。因为只需要一次扫描,所以算法复杂度是O(n),n是数组的长度。而空间上,一般情况是O(1),但是如果数是全9,那么是最坏情况,需要O(n)的额外空间。代码如下:
#include <iostream>
#include<vector>
#include <iterator>
#include <algorithm>
using namespace std;
vector<int> plusOne(vector<int> &digits) {
vector <int >res;
reverse(digits.begin(),digits.end());
res=digits;
res.push_back(0);
for (int i=0;i<res.size()-1;i++)
{
if (res[i]+1>=10)
{
res[i]=0;
if (i==res.size()-2)
{
res[i+1]+=1;
}
}
else
{
res[i]+=1;
break;
}
}
if (res.back()==0)
{
res.pop_back();
}
reverse(res.begin(),res.end());
return res;
}
void main()
{
int a[3]={9,9,9};
vector<int> b(a,a+3);
vector<int> c;
c=plusOne(b) ;
for (int i=0;i<c.size();i++)
{
cout<<c[i]<<" ";
}
}
结果为1000