基礎(chǔ)點(diǎn)
加1操作,從末尾開(kāi)始向前計(jì)算進(jìn)位,注意若進(jìn)到最前一位還需要進(jìn)位的話,要對(duì)vector進(jìn)行插入操作:digits.insert(digits.begin(),1);
常見(jiàn)的vector插入操作:
vector.insert(pos,elem); //在pos位置插入一個(gè)elem元素的拷貝,返回新數(shù)據(jù)的位置。
vector.insert(pos,n,elem); //在pos位置插入n個(gè)elem數(shù)據(jù),無(wú)返回值。
vector.insert(pos,beg,end); //在pos位置插入[beg,end)區(qū)間的數(shù)據(jù),無(wú)返回值
實(shí)現(xiàn):
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;
}
};
解法中可以簡(jiǎn)化的地方
此題加1,因?yàn)?的特殊性,最大的加和結(jié)果為10,且不需要對(duì)此結(jié)果進(jìn)行計(jì)算,必然是余0進(jìn)1的,所以上述的判斷可以簡(jiǎn)化判斷和取余計(jì)算。