思路一:递归
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;