20.12.15 leetcode738

题目链接:https://leetcode-cn.com/problems/monotone-increasing-digits/

题意:给你一个整数N,求一个满足从前往后是每一位是递增的最大整数。

分析:想要求最大的数,就得尽可能让前面的位N相等,一开始先从前往后遍历看看每一位是不是递增的,如果到了某一位不再满足递增关系,可以将这一位的前一位减1,之后从这一位开始到后面的所有位都直接为9,要注意的是,前一位减1后可能会破坏之前的递增关系,所以还有继续判断一下前面是不是还满足,不满足的就在不满足的那一位减1即可。

class Solution {
public:
    int monotoneIncreasingDigits(int N) {
        string s=to_string(N);
        int i=1;
        while(i<s.length()&&s[i-1]<=s[i])i++;
        if(i<s.length()){
            while(i>0&&s[i-1]>s[i]){
                s[i-1]-=1;
                i--;
            }
            for(i+=1;i<s.length();i++){
                s[i]='9';
            }
        }
        return stoi(s);
    }
};
原文地址:https://www.cnblogs.com/qingjiuling/p/14138542.html