我的思路:
分以下几个位置:
- 句末、句中、句首
分以下几种情况:
- 到句尾
- < 9 直接加一
- = 9 向前继续判断
- 到句中
- < 9 直接加一, 后面的9变成0
- = 9 向前继续判断
- 到句首
- < 9 直接加一,后面的9变0
- = 9 句首的9变1,后面的9全变0,并在末尾加0
vector<int> plusOne(vector<int>& digits) {
//非空
int i = digits.size()-1;
if(digits[i] < 9){ //句尾小于9,直接加
++ digits[i];
}else if(digits[i] == 9){ //句尾等于9,继续向前判断
while(--i>=0 && digits[i] == 9) //直到不为9的位置
;
if(i == -1){ //如果到达句首,首变1,后变0,尾加0
while(++i < digits.size()){
if(i == 0) digits[i] = 1;
else digits[i] = 0;
}
digits.push_back(0);
}else{ //在句中,这位加1,后面的9变0
++ digits[i];
while(++i < digits.size()) digits[i] = 0;
}
}
return digits;
}