66. Plus One某数+1(通过放到数组里)--Array

来源:互联网 发布:淘宝收藏加购在哪里 编辑:程序博客网 时间:2024/06/03 18:47

66. Plus One某数+1(通过放到数组里)--Array

Given a non-negative number represented as an array of digits, plus one to the number.

The digits are stored such that the most significant digit is at the head of the list.

Subscribe to see which companies asked this question

两种方法时间一样,都是3ms.

法1:

class Solution {public:// 假设现有一个数是239,则将2、3、9放入digits中,即digits[2,3,9]// 输出应为240    vector<int> plusOne(vector<int>& digits)     {        // bad input检查        int sz = digits.size();        if(sz == 0)            return digits;                // 初始化变量        vector<int> digitsAfterPlusOne(sz);                 // +1后的结果vector,长度和原数位数相同        int  thisBitVal = 0;                                // +1后,"当前位"的值        bool WhetherBeforeBitCarry = 1;                     // +1后,"前一位"是否进位(其中"carry"意为进位)...                                                            // ...初始值是1仅仅是为了最后一位的+1,之后每次循环该值都会变                                                                    for(int i = sz - 1; i >= 0; --i)                    // 从后向前遍历旧数组(因为从后向前+1)        {            thisBitVal = digits[i] + WhetherBeforeBitCarry; // "当前位" 要加上 "后面进上来的位"            WhetherBeforeBitCarry = thisBitVal / 10;        // +1后,"前一位"是否要进位            digitsAfterPlusOne[i] = thisBitVal % 10;        // +1后,"当前位"的值                    }                // 第一位(即999的"百位的9")进位怎么办        if(WhetherBeforeBitCarry != NULL)            digitsAfterPlusOne.insert(digitsAfterPlusOne.begin(), WhetherBeforeBitCarry);                    return digitsAfterPlusOne;    }};

法2:全部拷贝一遍,从后向前遍历,若进位为0则结束(前面的数肯定不会变了),和法1时间一样(仅仅13、24、25行有改变)
class Solution {public:// 假设现有一个数是239,则将2、3、9放入digits中,即digits[2,3,9]// 输出应为240    vector<int> plusOne(vector<int>& digits)     {        // bad input检查        int sz = digits.size();        if(sz == 0)            return digits;                // 初始化变量        vector<int> digitsAfterPlusOne(digits);               // +1后的结果vector,长度和原数位数相同        int  thisBitVal = 0;                                  // +1后,"当前位"的值        bool WhetherCarryToBeforeBit = 1;                     // +1后,"前一位"是否进位(其中"carry"意为进位)...                                                              // ...初始值是1仅仅是为了最后一位的+1,之后每次循环该值都会变                                                                    for(int i = sz - 1; i >= 0; --i)                      // 从后向前遍历旧数组(因为从后向前+1)        {            thisBitVal = digits[i] + WhetherCarryToBeforeBit; // "当前位" 要加上 "后面进上来的位"            WhetherCarryToBeforeBit = thisBitVal / 10;        // +1后,"前一位"是否要进位            digitsAfterPlusOne[i]   = thisBitVal % 10;        // +1后,"当前位"的值            if(WhetherCarryToBeforeBit == NULL)               // 只是+1,没有进位了,前面的数肯定不会变了(如239 到 240 百位2没变)                return digitsAfterPlusOne;        }                // 第一位(即999的"百位的9")进位,在最前面插入1        if(WhetherCarryToBeforeBit != NULL)            digitsAfterPlusOne.insert(digitsAfterPlusOne.begin(), WhetherCarryToBeforeBit);                    return digitsAfterPlusOne;    }};


下面是思路:




0 0
原创粉丝点击