Given a non-negative integer represented as a non-empty array of digits, plus one to the integer.
You may assume the integer do not contain any leading zero, except the number 0 itself.
The digits are stored such that the most significant digit is at the head of the list.
方法一、数组基本操作,注意insert和emplace的区别,时间复杂度为O(n)
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int n=digits.size();
if(n==0) return digits;
int temp=1;
for(int i=n-1;i>=0;i--)
{
if(digits[i]==9&&temp==1)
{
digits[i]=0;
continue;
}
else if(temp==0)
break;
else {
digits[i]+=1;
temp=0;
}
}
if(temp==1)
//digits.emplace(digits.begin(),1);//使用emplace传递的元素给构造函数构造对象,
digits.insert(digits.begin(),(int)1);//使用insert必须传递一个对象,这里使用强制转换
return digits;
}
};
方法二:时间复杂度为O(1)
注意连续进位并且改变位数的情况只有99999,进位之后变为100000,与之前的区别是首元素变为1,尾部添加一个0,其他变为0,将方法1的在最高位插入,改为在尾部添加,时间复杂度降低为O(1)
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int n=digits.size();
for(int i=n-1;i>=0;i--)
{
if(digits[i]==9) digits[i]=0;
else
{
digits[i]++;
return digits;//没有进位马上返回函数值
}
}
//如果在循环体内没有返回,说明是9999
digits[0]=1;
digits.push_back(0);
return digits;
}
};