738.单调递增的数字

class Solution {
public:
    int monotoneIncreasingDigits(int n) {
        vector <int> a;
        int nn = n;
        while(n > 0) {
            int item = n % 10;
            a.push_back(item);
            n /= 10;
        }
        reverse(a.begin(),a.end());
        for (int i = 1; i < a.size(); i ++ ) {
            if (a[i] < a[i-1]) {
                int cnt = a.size() - i;
                int shift = cnt;
                int right = 0;
                while (cnt > 0) {
                    right *= 10;
                    right += 9;
                    cnt -- ;
                }
                int left = 0;
                for (int j = 0; j < i; j ++ ) {
                    left *= 10;
                    left += a[j];
                }
                left = monotoneIncreasingDigits(left - 1);
                return left * 10 * shift + right;
            }
        }
        return nn;
        // 1232 -> 1229
        // 2312 -> 2299
        // 9123 -> 8999
        // 100001 -> 
    }
};

332 -- 329 × 332 -- 299 √ 想不出了,原来是要从后往前

class Solution {
public:
    int monotoneIncreasingDigits(int n) {
        string s = to_string(n);
        int flag = s.size();
        for ( int i = s.size() - 1; i > 0; i -- ) {
            if (s[i-1] > s[i]) {
                flag = i;
                s[i-1] -- ;
            }
        }
        for ( int i = flag; i < s.size() ; i ++ ) {
            s[i] = '9';
        }
        return stoi(s);
    }
};

草 真优雅