leetcode Plus One

来源:互联网 发布:handler源码解析 编辑:程序博客网 时间:2024/06/02 17:29

刚开始看这道题的时候,都没看懂,(⊙﹏⊙b汗)后来明白题意是

给定一个十进制数,用数组表示每一位,要求返回加一后的结果,存在一种特殊的情况就是,每一位都是9的时候,加1会使总位数多1,这时需要新开辟一个vector变量存数,其他情况不改变位数。

模拟大数的加法,当没有进位的时候就可以弹出循环。

特殊考虑各个位数就是9的情况,加一后会多出一位,即结果是1加上len个0,len是digits的长度。

class Solution {public:    vector<int> plusOne(vector<int> &digits) {        int n = digits.size();        int i = 0;        for(;i<n;i++) {            if(digits[i] != 9)            break;        }        if(i == n) {            vector<int> res;            res.push_back(1);            for(i=0;i<n;i++) {                res.push_back(0);            }            return res;        }        int carry = 1;        for(i = n-1;i>=0;i--) {         <span style="background-color: rgb(255, 255, 102);">   //这里注意,digit和carry的计算顺序不可更改!必须先计算和,再计算进位</span>
<span style="background-color: rgb(255, 255, 102);"><span style="white-space:pre"></span>    // 也必须用一个新变量暂存模10之后的和!因为下面计算carry的时候要用到原来的digits[i]</span>            int digit = (digits[i]+carry)%10;            carry = (digits[i]+carry)/10;            digits[i] = digit;            if(carry == 0)            break;        }        return digits;    }};


0 0
原创粉丝点击