LeetCode——Plus One

Given a non-empty array of digits representing a non-negative integer, plus
one to the integer.

You may assume the integer does not contain any leading zero, except the
number 0 itself.

Example 1:

  • Input: [1,2,3]
  • Output: [1,2,4]
  • Explanation: The array represents the integer 123.

Example 2:

  • Input: [4,3,2,1]
  • Output: [4,3,2,2]
  • Explanation: The array represents the integer 4321.

其实这道题的题意就是,给一个整数,每一位从高位到低位按顺序存续在vector当中,要求我们将这个整数+1 ,并将结果同样存储在vector当中并返回。

可以为两大种情况,进而分成三种情况:
1. 末尾数字<9,则直接将最后一位加一即可;
2. 末尾数字=9,则往前遍历,同时将每一位等于九的元素置零,当第一次碰到不为9的数字元素时,将该元素加一即可;(1399)
3. 末尾数字=9,则往前遍历,同时将每一位等于九的元素置零,发现所有位数均为9,此时新建一个vector(比输入的vector的size大1)将首位置1,同时其他位全为0;

✔ Accepted
✔ 109/109 cases passed (8 ms)
✔ Your runtime beats 38.19 % of cpp submissions
✔ Your memory usage beats 28.83 % of cpp submissions (8.7 MB)

vector<int> plusOne(vector<int>& digits) {
        if(digits[digits.size() -1 ] != 9){
            digits[digits.size() -1] += 1;
            return digits;
        }
        int i = digits.size() -1;
        while(i>=0 && digits[i] == 9){
            i--;
        }
        if(i>=0){
            digits[i] += 1;
            for(int j= i+1; j<digits.size(); j++)
                digits[j] = 0;
            return digits;
        }
        else{
            vector<int> res;
            res.push_back(1);
            for(int j=1; j<=digits.size(); j++)
                //res[j] = 0; //这句越界了,访问了不知名的内存
                res.push_back(0);
            return res;
        }     
    }

修改一部分:vector res(digits.size()+1); //意为创建这么多个初始化值为0的data
✔ Accepted
✔ 109/109 cases passed (4 ms)
✔ Your runtime beats 100 % of cpp submissions
✔ Your memory usage beats 55.21 % of cpp submissions (8.6 MB)

else{
            vector<int> res(digits.size()+1);
            //res.push_back(1);
            res[0] = 1;
            //for(int j=1; j<=digits.size(); j++)
                //res[j] = 0;
                //res.push_back(0);
            return res;
        }     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值