这个题的关键在于处理9,99,999,...的类型的数字,而处理这种类型的数字有个漏洞,可以偷个懒
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int flag=0;
int len=digits.size();
while(digits[0]==0)
{
digits[0]++;
return digits;
}
digits[len-1]++;
for(int i=len-1;i>=0;i--)
{
digits[i] +=flag;
flag=0;
if(digits[i]==10)
{
flag=1;
digits[i]=0;
}
}
//当时这个没有搞懂(这个的确是把vector的大小改了,但是是把一个0加在最后了,digits[0]=0把之前的数给覆盖了,但是却通过了leedcode?)
//其实,由于是在该数的基础上+1,不存在在其他位上+1的情况(我当时就想错了);所以,只有9,99,999,...才需要进1位!
//而在这种类型的数多一位的情况下, 只需要达到一个效果:所有数都变成0,在最前面加一位;
//想达到上面的效果只需要执行三个操作:
1、所有位都变成0(前面的循环已经完成了)
2、vector变长,而巧就巧在变长是在后面加个0,完全不影响咱们的操作
3、把最前面的数变成1
if(flag==1)
{
digits.resize(digits.size() + 1);
digits[0] = 1;
}
return digits;
}
};