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

news/2024/7/19 15:02:56 标签: leetcode, 算法, js

力扣上的第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('')//返回结果
        };

贪心算法总结:

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


http://www.niftyadmin.cn/n/5374383.html

相关文章

Unity学习笔记(零基础到就业)|Chapter04:C#篇补充到Unity篇过渡

Unity学习笔记&#xff08;零基础到就业&#xff09;&#xff5c;Chapter02:C#篇补充到Unity篇过渡 前言C#总结补充1.值类型和引用类型有什么区别&#xff0c;他们在值的传递上分别有怎样的特性2.string是引用类型&#xff0c;但是他对外表现出值类型的特性&#xff0c;为什么&…

【leetcode热题100】解码方法

难度&#xff1a; 中等通过率&#xff1a; 21.5%题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目描述 一条包含字母 A-Z 的消息通过以下方式进行了编码&#xff1a; A -> 1 B -> 2 ... Z -> 26给定一个只包含数字…

数据结构(C语言)代码实现(七)——一元多项式的表示与相加

目录 前言 参考资料格式 头文件LinkList.h LocateElem函数&#xff0c;定位查找 有序插入&#xff08;没测试&#xff09; 完整代码 头文件polynomial.h 测试函数&#xff08;主函数&#xff09; 测试结果 前言 寒假在家&#xff0c;有点学不下去&#xff0c;写文章的…

基于51 单片机的交通灯系统 源码+仿真+ppt

主要内容&#xff1a; 1&#xff09;南北方向的绿灯、东西方向的红灯同时亮40秒。 2&#xff09;南北方向的绿灯灭、黄灯亮5秒&#xff0c;同时东西方向的红灯继续亮。 3&#xff09;南北方向的黄灯灭、左转绿灯亮&#xff0c;持续20秒&#xff0c;同时东西方向的红灯继续…

再说开源软件

开源软件推动技术创新 开源软件的相关话题&#xff0c;我曾经进行过原创文章的讨论&#xff0c;想了解的&#xff0c;可以参考我的文章&#xff1a; 【AI】一文读懂大模型套壳——神仙打架&#xff1f;软饭硬吃&#xff1f;-CSDN博客 【AI】马斯克说大模型要开源&#xff0c…

AD高速板常见问题和过流自锁

可以使用电机减速器来增大电机的扭矩&#xff0c;低速运行的步进电机更要加上减速机 减速电机就是普通电机加上了减速箱&#xff0c;这样便降低了转速增大了扭矩 HDMI布线要求&#xff1a; 如要蛇形使其等长&#xff0c;不要在HDMI的一端绕线。 HDMI走线时两边拉线&#xff0…

【原创 附源码】Flutter安卓及iOS海外登录--Google登录最详细流程

最近接触了几个海外登录的平台&#xff0c;踩了很多坑&#xff0c;也总结了很多东西&#xff0c;决定记录下来给路过的兄弟坐个参考&#xff0c;也留着以后留着回顾。更新时间为2024年2月8日&#xff0c;后续集成方式可能会有变动&#xff0c;所以目前的集成流程仅供参考&#…

debian12 - openssh-9.6.P1的编译安装

文章目录 debian12 - openssh-9.6.P1的编译安装概述笔记备注END debian12 - openssh-9.6.P1的编译安装 概述 在debian12上, 源码编译安装了openssl3.2 导致ssh失败. lostspeeddebian12d4x64:~$ openssl version OpenSSL 3.2.0 23 Nov 2023 (Library: OpenSSL 3.2.0 23 Nov 2…