思路一:递归
class Solution { public: vector<int> plusOne(vector<int>& digits) { return plusOneByOne(digits,digits.size()-1); } vector<int> plusOneByOne(vector<int>& digits,int pos){ if(digits[pos]!=9){ digits[pos]+=1; return digits; }else if(pos!=0){ digits[pos]=0; return plusOneByOne(digits,pos-1); }else{ digits[pos]=0; digits.insert(digits.begin(),1); return digits; } } };
思路二:遍历(更优的时间空间复杂度)
算法:
- 从后向前,找到第一个不为9的数,该位+1,该位后的数均变为0;
- 未找到的话,说明该数全为9,则返回 1 加 digits.size()个0
int len=digits.size(); for(int i=len-1;i>=0;i--){ if(digits[i]!=9){ digits[i]++; return digits; }else{ digits[i]=0; } } digits.insert(digits.begin(),1); return digits;