代码随想录——贪心算法22单调递增的数字

image
image

思路

显然本题要对数字按位处理,转化为字符串更好处理。

既然要尽可能的大,那么这个数从高位开始要尽可能地保持不变。
那么我们找到从高到低第一个满足 str[i]>str[i+1] 的位置,然后把 str[i]−- ,再把后面的位置都变成 9 即可

但是由于减小了 str[i] 以后,可能不满足 str[i−1]<=str[i] 了
所以要从低到高位遍历,设置变量idx,str[i-1]>str[i]了就更新idx=i,str[i-1]--,最后把idx及其之后的都为9

代码

class Solution {
public:
    int monotoneIncreasingDigits(int n) {
        string str = to_string(n);
        int idx = str.size();//这样初始化是防止第二个for循环在idx没有被赋值的情况下执行
        for(int i=str.size()-1;i>0;i--){
            if(str[i-1]>str[i]){
                idx = i;
                str[i-1]--;
            }
        }
        for(int i=idx;i<str.size();i++){
            str[i]='9';
        }
        return stoi(str);
    }
};
posted @ 2024-12-25 09:21  NeroMegumi  阅读(0)  评论(0编辑  收藏  举报