66. Plus One-Leetcode

基础点

加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 plusOne(vector& 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)