一、问题
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
Example
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
二、思路
- 主要分两种情况:
(1)末位小于9:直接加1,无进位。
(2)末位等于9:从数组最末位开始往前移,等于9的位就置为0,直到出现不为9的位,直接加1,循环结束。
(当最高位还有进位的时候要增加digits头部要增加一个值为“1”的位。)
三、代码
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int i=digits.size()-1; //记录当前位置,从后向前
while(i>-1)
{
//没有进位,直接加一
if(digits[i]<9)
{
digits[i]++;
return digits;
}
digits[i]=0;
i--;
}
//最高进位为1的情况
vector<int>vec={1};
vec.insert(vec.end(),digits.begin(),digits.end());
return vec;
}
};
四、复杂度分析
时间复杂度:O(n)
最好的情况是O(1),最坏的情况是O(n),平均(1+n)/2