LeetCode66.加一

题目链接:

66. 加一 - 力扣(LeetCode)

分析:题目属于普通的小模拟,也是考研算法最爱的手撕代码类,对于这类问题大家一定要掌握。

算法思路:模拟相加的过程,因为题目中给出的vector中的整数与我们平时的计算直觉相反,所以先进行一个reverse操作方便处理。

接下来定义一个temp常量,初始化为1,表示现存的进位那一位的值为1。然后模拟加法的过程即可,从最低位开始。判断该位的情况:

  • 如果该位的值为9,且temp=1,说明需要向下一位进位。
  • 如果该位的值不等于9,则根据temp的情况决定该位的值是否需要发生变化。

如此反复直到最后一位判断完毕。这里还有一个关键点,在所给的所有位数判断结束后,还需要检验temp是否为1。如果不为1,那么没有影响;如果为1,那么还需要开辟一个新位,存储该结果(类似于999+1=1000,这里只保存了三个0,我们需要把最高位的1也保存下来)。

一切结束后,再把结果reverse一下,就可以得到最终的答案。

下面是参考代码:

class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        reverse(digits.begin(),digits.end());//反转字符串 方便处理
        int temp=1; //设置
        for(int i=0;i<digits.size();++i){
            if(digits[i]==9&&temp==1){  //满足进位的情况
                digits[i]=0;
            }else if(temp!=9&&temp==1){ //不满足进位 但是该位的值需要自增
                digits[i]++;
                temp=0;
            }
        }
        if(temp==1) //判断是否需要新创最高位
            digits.push_back(1);
        reverse(digits.begin(),digits.end());//反转回原来的答案
        return digits;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值