[简单]#66 加一
题目描述
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
简单想法
一种考虑是先提取数组为字符串再后续atoi转为int,然后加一后输出为数组,但是想了想所需要的内存消耗,好像不ok。另一种考虑是加法进位,只要找出在哪一位进位就可以了,然后选择了以新数组存结果的方式,执行结果如下,好像内存消耗太高了,那么大概可以舍弃掉数组存结果,直接在原有数组上修改的话可能好很多,但是经过我的不懈努力,我成功发现这个内存消耗好像与此无关emmmmm,而且牺牲空间换时间可能也是比较好的策略?
具体实现
// 解法二:进位式存储
vector<int> plusOne(vector<int>& digits) {
vector<int> res;
bool tag = false;
int index = digits.size()-1;
for(int i=digits.size()-1;i>=0;i--){
if(digits[i] != 9){
index = i;
tag = true;
break;
}
}
if(tag == true){
for(int i=0;i<index;i++){
res.push_back(digits[i]);
}
res.push_back(digits[index] + 1);
for(int i = index + 1; i< digits.size();i++){
res.push_back(0);
}
} else {
res.push_back(1);
for(int i=0;i<digits.size();i++){
res.push_back(0);
}
}
return res;
}
// 失败的试图优化
vector<int> plusOne(vector<int>& digits) {
int size = digits.size();
for(int i=size-1;i>=0;i--){
digits[i]++;
if(digits[i] != 10){
return digits;
}
else {
digits[i] = 0;
}
}
digits[0] = 1;
digits.push_back(0);
return digits;
}