解法一:
思路
十进制加法器。一般情况下只需要最后一位加1就能得到结果;如果最后一位是9,加1是10,发生进位;还有可能一路进位,每位都是9;最特殊的情况是进位到首位,需要在首位新增一位1。
步骤
1. 开一个循环,从数组末尾的下标元素开始依次往前,直到下标自减到0;
2. 不论是否发生进位,当前下标的元素都只会自加1;
3. 判断自加后的值是否是10,不是10,直接return数组,是10,将当前位元素置为0,且继续下一轮循环,将前一位重复2、3步骤,直到当前位值不为10就return出去;
4. 如果循环走完了,都没有return出去,说明进位一路到了首位,这时,就需要在首位元素之前插入一个1,完了之后再return。
代码
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
for (int i = digits.size() - 1; i >= 0; i--) {
digits[i] += 1;
if (digits[i] != 10) return digits;
else digits[i] = 0;
}
digits.insert(digits.begin(), 1);
return digits;
}
};
分析
时间复杂度:O(n)
空间复杂度:O(1)