https://leetcode.cn/problems/plus-one/description/
题目描述:
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 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]
1 <= digits.length <= 100
0 <= digits[i] <= 9
作者:LeetCode
链接:https://leetcode.cn/leetbook/read/top-interview-questions-easy/x2cv1c/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
一开始我写的代码:
具体思路就是用str字符串遍历nums,然后将字符串str转为int型在加一,加入到result数组中在翻转,因为是逆序加入(取余数);
```
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
string str;
for(int i=0;i<digits.size();i++){
str+=to_string(digits[i]);
}
int n=atoi(str.c_str())+1;
vector<int>result;
while(n>0){
result.push_back(n%10);
n/=10;
}
reverse(result.begin(),result.end());
return result;
}
};
```
结果就是:
执行用时:4 ms
输入
[9,8,7,6,5,4,3,2,1,0]
输出
[1,2,8,6,6,0,8,6,1,9]
预期结果
[9,8,7,6,5,4,3,2,1,1]
直接说原因---就是atio将字符串转化为int类型 但是测试用例是大于2^31-1的,所以出错。
然后就模拟加一过程代码如下:
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
for(int i=digits.size()-1;i>=0;i--){
if(digits[i]!=9){
digits[i]++;
return digits;
}
else if(digits[i]==9){
digits[i]=0;
continue;
}
}
vector<int>result;
result.push_back(1);
for(int i=0;i<digits.size();i++){
result.push_back(digits[i]);
}
return result;
}
};
提交成功