66. Plus One-Leetcode

作者: analanxingde | 来源:发表于2018-01-24 11:10 被阅读1次

    基础点

    加1操作,从末尾开始向前计算进位,注意若进到最前一位还需要进位的话,要对vector进行插入操作:digits.insert(digits.begin(),1);
    常见的vector插入操作:

    vector.insert(pos,elem);   //在pos位置插入一个elem元素的拷贝,返回新数据的位置。
    vector.insert(pos,n,elem);   //在pos位置插入n个elem数据,无返回值。
    vector.insert(pos,beg,end);   //在pos位置插入[beg,end)区间的数据,无返回值
    实现:
    vecA:{1,3,5,7,9},vecB:{2,4,6,8}
    vecA.insert(vecA.begin(), 11); //{11, 1, 3, 5, 7, 9}
    vecA.insert(vecA.begin()+1,2,33); //{11,33,33,1,3,5,7,9}
    vecA.insert(vecA.begin() , vecB.begin() , vecB.end() ); //{2,4,6,8,11,33,33,1,3,5,7,9}
    

    我的解法

    class Solution {
    public:
        vector<int> plusOne(vector<int>& digits) {
            int len=digits.size();
            int r=0,flag=1;
                
            for(int i=len-1;i>=0;i--)
            {
                if(i==len-1)
                    r=1;
                if(digits[i]+r>=10)//digits[i]+r=10
                {
                    r=1;
                    digits[i]=(digits[i]+r)%10; //digits[i]=0
                    if(i==0)
                        digits.insert(digits.begin(),1);
                }
                else
                {
                    digits[i]=digits[i]+r;
                    break;
                }
            }
            
            return digits;
        }
    };
    

    解法中可以简化的地方

    此题加1,因为1的特殊性,最大的加和结果为10,且不需要对此结果进行计算,必然是余0进1的,所以上述的判断可以简化判断和取余计算。

    相关文章

      网友评论

        本文标题:66. Plus One-Leetcode

        本文链接:https://www.haomeiwen.com/subject/bapsaxtx.html