【LeetCode66】加一(C++)

题目传送门:66. 加一 - 力扣(LeetCode)

题解

题目大意为给定一个高精度数字,放在数组中,要求对这个数加一并返回。

类似于高精度加低精度运算,然而这里只需加一更简单一些,因此,我们并不需像高精度加法一样把数字先翻过来,而是直接在原数上进行运算。

我们从数字的个位,也就是数组的最后一位进行加一,会遇到两种情况:需要进位不需要进位

对于不需要进位的情况:直接在该位置上加一,即为答案。

对于需要进位的情况:又会分出两种情况,一种是正常进位,一种是最高位需要进位。

对于正常进位的操作是先将当前位置置为0,并在高一位加1。在数组中即在该数字的前一个数字上加一,如循环中i--,然后继续判断此时的加一是可以直接加还是需要再进位。

对于最高位进位的情况,因为在数组中最高位在digits[0],无法再在其前面添加数字,所以此处我们重新定义一个vector数组,长度比原数组大1,并将最高位置为1即可。例如原数为999,那么重新定义一个长度为4的数组最高位置为1,即1000。

参考代码

class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        for(int i=digits.size()-1;i>=0;i--)
        {
            if(digits[i]!=9)//不需进位
            {
                digits[i]++;
                break;
            }
            else if(i!=0)//需要进位 且 不是最高位进位
            {
                digits[i]=0;
            }
            else//最高位需要进位
            {
                vector<int> ans(digits.size()+1);
                ans[0]=1;
                return ans;
            }
        }
        return digits;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值