力扣738单调递增的数字思路以及贪心总结

力扣上的第738题,大家刚开始看的可能比较懵,读懂之后就会发现其实是找小于n的并且右边位上的数字大于等于左边位上的数字的最大整数。这道题主要考的就是一个思路,刚开始我想了近半个小时,没有丝毫思路,就看了一部分解析,然后得到思路如下:

        从这个数字的各位开始向左依次比较,若左边数大于右边,那么左边数减一,右边数变为九。

        我的第一部分思路就到这里,写完之后测试全部通过,提交的时候测试用例100失败,答案应该是99,我的是90,然后我就很大意的加了个当n是10的整数倍时,直接返回n-1,结果提交的时候测试用例101也错了,这个时候我才意识到问题的严重性,一旦遇到大于等于三位数且中间有零的就会出错。于是我又去看解析,解析中并没有提到如何解决这个问题,然后我直接去参考答案,发现答案中确实有其他步骤,经过我参考之后终于领悟到这道题所有的思路

        首先将数字n转化成数字型数组,方便操作;然后设置一个正无穷的变量m(当然如果第二个for循环添加一个判断的话,将m设置成合理的数字也可以);再然后从这个数字的各位开始向左依次比较,若左边数大于右边,那么左边数减一,右边数变为九,记录m为本次索引;最后将从m开始之后的所有数字都变成九,再将数组转成数字即可输出。代码如下

        var monotoneIncreasingDigits = function (n) {
            n = String(n).split('').map(item => +item)//将n转换成以数字型位元素的数组
            let m = Infinity//设置变量m为正无穷
            for (let i = n.length - 1; i > 0; i--) {
                if (n[i - 1] > n[i]) {
                    m = i//使用m记录最近一次改编为9的地方
                    n[i - 1] -= 1
                    n[i] = 9
                }
            }
            for (let i = m; i < n.length; i++) {//将最近改变为九之后的数字全部变成九
                n[i] = 9
            }
            return +n.join('')//返回结果
        };

贪心算法总结:

        其实贪心算法还真的没有什么可以总结的,还是强调贪心算法没有具体的模板,需要的思考比较多;我们可以大胆假设,只要每个部分取最合理,最终结果最合理,没有反例,那么就可以尝试贪心;不要纠结具体推理和数学推导过程,因为这并不在我们思考之内。

相关推荐

  1. 738单调递增数字思路以及贪心总结

    2024-02-09 06:12:02       37 阅读
  2. 738. 单调递增数字贪心

    2024-02-09 06:12:02       31 阅读
  3. 738. 单调递增数字

    2024-02-09 06:12:02       13 阅读
  4. 738. 单调递增数字 - (LeetCode)

    2024-02-09 06:12:02       29 阅读
  5. LeetCode 37天 | 738.单调递增数字 贪心算法总结

    2024-02-09 06:12:02       30 阅读
  6. 738. 单调递增数字

    2024-02-09 06:12:02       22 阅读
  7. 738. 单调递增数字

    2024-02-09 06:12:02       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-09 06:12:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-09 06:12:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-09 06:12:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-09 06:12:02       18 阅读

热门阅读

  1. 【正则表达式的妙用】

    2024-02-09 06:12:02       33 阅读
  2. Nginx+React在Docker中实现项目部署

    2024-02-09 06:12:02       36 阅读
  3. 常用的文件系统、存储类型小整理

    2024-02-09 06:12:02       31 阅读
  4. C#面:什么是Code-Behind技术

    2024-02-09 06:12:02       28 阅读
  5. PostgreSQL 与 MySQL 相比,优势何在?

    2024-02-09 06:12:02       36 阅读
  6. ASP.NET Core 7 MVC 使用 Ajax 和控制器通信

    2024-02-09 06:12:02       33 阅读
  7. C语言如何控制输出⻓度?

    2024-02-09 06:12:02       33 阅读
  8. 【flink状态管理(四)】MemoryStateBackend的实现

    2024-02-09 06:12:02       27 阅读