- 链接
https://leetcode.cn/problems/plus-one/ - 题目
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
-
思路
- 第一种,暴力解题。把数组翻转后,通过模拟数字加法来得出结果,该方法的内存消耗大,繁琐;
- 第二种,分析法。因为数字只是加一,所以根据分析题目可知,能够有进位的就是“9”,并且进位只会是1,进位后的数字只会是0,且其余情况下末尾+1不会为0。并且,如果循环结束,没有return。那么就是[9,9,…,9]所以加一后的值为[1,0,0,…,0]。
-
代码
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
//my,翻转法
// reverse(digits.begin(),digits.end());
// int carry,tmp;
// carry=(digits[0]+1)/10;
// digits[0]=(digits[0]+1)%10;
// for(int i=1;i<digits.size();i++){
// tmp=digits[i]+carry;
// digits[i]=tmp%10;
// carry=tmp/10;
// // if(!carry)
// // break;
// //上面两个语句是对耗时和内存的优化
// //针对特别大的数字,在中途进位为0了,所以可以退出,不用全部循环一遍
// }
// if(carry)
// digits.push_back(carry);
// reverse(digits.begin(),digits.end());
// return digits;
//官方
int len=digits.size();
for(int i=len-1;i>=0;i--){
digits[i]=(digits[i]+1)%10;
if(digits[i]!=0)
return digits;
}
//循环结束,没有return的情况
vector<int> ans(len+1);
ans[0]=1;
return ans;
}
};