给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 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 ,如果不是10直接就ok 了;如果需要进位,将这位设置成0,下一位继续+1就好了。继续循环,如果初始每一位都是9,那么全都是0,在第一位补充一个1 即可(引申出如加的是一个个位数,亦可以用这种方式,记得把最溢出的这以为-10即可)。代码如下:
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
for(int i = digits.size()-1;i >=0 ;i--){
digits[i]+=1;
if(digits[i]!=10){
return digits;
}
else{
digits[i]=0;
}
}
digits.insert(digits.begin(),1);
return digits;
};
自我感悟:有些时候感觉不要以人的思维去思考,应该以机器的思维思考,并且一种问题可以换一种角度思考,智力不如人很正常,但失去了思考就显得十分呆滞。