栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Leetcode贪心序列问题三】738. 单调递增的数字

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Leetcode贪心序列问题三】738. 单调递增的数字

文章目录
  • Leetcode738
    • 1.问题描述
    • 2.解决方案
      • 解法一:暴力
      • 解法二:贪心(通过个例推断整体)
        • 思路:
        • 总结:

Leetcode738 1.问题描述

2.解决方案 解法一:暴力

暴力解法不必多说,就遍历小于等于N的每一个数,并判断是否单调递增即可,代码也很简单这里就不给出了

解法二:贪心(通过个例推断整体) 思路:

1.首先除了暴力,我们好像很难想到其他入手点,说白了就是我们很难通过给的N,去局部改变一个比如说四位数的几个位数,然后实现这个递增的数,说白了遇见98,76,87我们该怎么变化能改变局部又不影响整体的递增,这一谈到局部整体很明显就是贪心一类了
2.那么大胆一点98->89 76->69 87->79,也就是第一个数减一,第二个数直接变9,这一点我们想到了,但又往往觉得对于一个四五位数的数这样做整体会不会不对呀,每当有这种想法我们就想一想一个o(N)的算法就是得这样局部进而辐射整体,不然怎么o(N),于是我们带入一个四五位数的数发现还真可以
3.当然要注意一个细节就是100->99 87777->79999,也就是找到最高位是9的位数,后面统一赋为9

总结:

1.好了,题做出来了,那有什么值得我们借鉴的呢,本体思路我们当然已经记住了,以后出现类似的不必多说,more,遇到不太会的题,我们不能要求一下子想出来一个算法就把问题解决了,而是要想着一点一点解决,比如举三个特例总结出来点什么东西,然后看看是否能从局部推出整体(也是举例子),没准问题就解决了,理解这个算法我想再简单不过了,难得是下一次遇见类似或不类似的思考的角度是怎样的
2.贪心不像dp,回溯等有那么强的套路性,而更多的是秉持的一个思想去开阔的想问题

class Solution {
public:
    int monotoneIncreasingDigits(int n) {
        //to_string
        string strNum= to_string(n);
        int flag=strNum.size();
        for(int i=strNum.size()-1;i>=1;i--){
            if(strNum[i-1]>strNum[i]){
                strNum[i-1]--;
                //strNum[i]='9';
                flag=i;
            }
        }
        for(int i=flag;i
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/274613.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号