一、题目
1、题目描述
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
示例 2:
输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。
示例 3:
输入:digits = [0]
输出:[1]
2、基础框架
- C++版本给出的基础框架如下:
3、原题链接
https://leetcode.cn/problems/plus-one/
二、解题报告
1、思路分析
(
1
)
(1)
(1)考虑可能的进位问题,设置一个变量来表示进位。
(
2
)
(2)
(2)从尾到头遍历数组,遍历的第一位执行加1操作,判断是否需要进位,如果需要进位,则进位变量设为1,将第一位加1之后的值除10求余将余数加入结果数组,如果不需要进位,则进位变量为0。
(
3
)
(3)
(3)之后的遍历中每个数字都加上进位变量,依次判断是否需要进位。
(
4
)
(4)
(4)遍历完成后,判断进位变量是否为1,如果为1,则将1加入结果数组。
(
5
)
(5)
(5)反转结果数组。
2、时间复杂度
时间复杂度为O(n),空间复杂度为O(n)
3、代码详解
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int d = 0;
vector<int> re;
int n = digits.size();
int temp = 0;
for (int i=n-1;i>=0;i--) {
if (i == n-1){
temp = d + digits[i] + 1;
}
else {
temp = d + digits[i];
}
if (temp > 9) {
temp = temp%10;
d = 1;
} else {
d = 0;
}
re.push_back(temp);
}
if (d > 0) re.push_back(1);
reverse(re.begin(),re.end());
return re;
}
};