738. 单调递增的数字

✅做题思路or感想

少有的二刷小障碍

大体思路是:为了让后面的数单调递减,最简单的方法就是把后面小的数直接改成9,让前面的数-1(相当于直接借了一位给后面,借一位给后面是最简单的方法了)

当然这道题还得先要老生常谈的化为字符串,才能对上面的数字实施精准修改

class Solution {
public:
    int monotoneIncreasingDigits(int n) {
        //先转化成字符串再操作
        string str = to_string(n);
        //Index代表的是[Index, str.size() - 1]这一段的数都是不符合要求的数,则需要把这个区间都变成9(贪心)
        //这里设置str.size()是有门道的
        //如果有发生Index的值变化,则无所谓。若没有发生值变化,则区间[str.size(), str.size() - 1]是不存在的,故也不会发生转换9的操作
        int Index = str.size();	
        for (int i = str.size() - 1; i > 0; i--) {
            if (str[i - 1] > str[i]) {
                Index = i;
                //向前一位借1
                str[i - 1]--;
            }
        }
        //转化[Index, str.size() - 1]为9
        for (int i = Index; i < str.size(); i++) {
            str[i] = '9';
        }
        return stoi(str);
    }
};
posted @   北原春希  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示