66.加1
目录
一、问题描述
二、解题思路
三、代码
四、复杂度分析
一、问题描述
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
二、解题思路
-
从数组的 最后一位(最低位) 开始加 1;
-
如果这一位加完不是 10,就直接返回;
-
如果是 10,就变成 0,然后进位,继续处理前一位;
-
如果最前一位也进位了,比如
[9,9,9]
,最后就需要在最前面插入一个1
。
三、代码
class Solution {
public:vector<int> plusOne(vector<int>& digits) {// 从最后一位开始处理进位for (int i = digits.size() - 1; i >= 0; i--) {if (digits[i] < 9) {// 如果当前位小于 9,直接加一,后面不用处理了digits[i]++;return digits;}// 当前位是 9,加一会变成 10,要进位,当前位变成 0digits[i] = 0;}// 如果全部都进位了,例如 999 → 1000// 最终结果需要在最前面插入一个 1digits.insert(digits.begin(), 1);return digits;}
};
四、复杂度分析
-
时间复杂度: O(n)(最坏情况下需要遍历整个数组)
-
空间复杂度: O(1)(如果允许修改输入数组)