基础点
加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的,所以上述的判断可以简化判断和取余计算。