题意:
给定一个用数组表示的数字,即数组中每个数表示一个数位上的数,例如 [1,2,3],表示 123 ,请问给这个数字加一后得到的结果(结果同样以数组的形式返回)。
注意:数组中不可能出现负数,且保证数组的首位即数字的首位不可能是 0 。
方法一:
直接模拟
思路:将数组逆序遍历,模拟加一操作。
要新增一个数组实现。
class Solution {
public:
vector<int> plusOne(vector<int>& nums) {
vector<int> res;
int flag=1;//进位
for(int i=nums.size()-1;i>=0;i--){//逆向遍历
res.push_back((nums[i]+flag)%10);
if(nums[i]+flag>9){//判断进位
flag=1;
}else{
flag=0;
}
}
if(flag){//判断进位
res.push_back(1);
}
reverse(res.begin(),res.end());//逆序
return res;
}
};
时间复杂度:
空间复杂度:![]()
方法二:
原地模拟
思路:原地操作原数组模拟加法操作。
特殊之处:最后需要逆序,判断进位,再逆序。
class Solution {
public:
vector<int> plusOne(vector<int>& nums) {
int flag=1;//进位
for(int i=nums.size()-1;i>=0;i--){//逆向遍历
if(nums[i]+flag>9){//判断进位
nums[i]=(nums[i]+flag)%10;
flag=1;
}else{
nums[i]=(nums[i]+flag)%10;
flag=0;
}
}
reverse(nums.begin(),nums.end());//逆序
if(flag){//判断进位
nums.push_back(1);
}
reverse(nums.begin(),nums.end());//逆序
return nums;
}
};
时间复杂度:
空间复杂度:![]()



京公网安备 11010502036488号