'''
Description:  738.单调递增的数字
Autor: 365JHWZGo
Date: 2021-11-10 09:34:56
LastEditors: 365JHWZGo
LastEditTime: 2021-11-10 14:55:40
'''class Solution(object):def monotoneIncreasingDigits(self, n):""":type n: int:rtype: int""" strN = str(n)f = strN[0]first = 0length = 0for i in range(1, len(strN)):if int(strN[i]) < int(f):                               breakelif int(strN[i]) == int(f):length += 1continueelse:f = strN[i]first = iif first==len(strN)-1 or length == len(strN)-1:return n            else:return int(strN[:first] + str(int(strN[first])-1)+'9'*(len(strN)-first-1))


思路:
one:
今天上午一直考虑的是如何循环,从最大值往下找数字,这样经过无数次的失败之后就一定会找到符合题目要求的数字,但是,在进行测试时发现,运行超出时长限制。

two:
然后开始探索第二种思路,我发现了一些规律,比如

11491537

这个测试用例的话,它就是在最大值处-1,然后结尾补9
然后我又登上了注定失败的路途

three:
我发现并不是所有的都是在最大值处-1,结尾补9,比如

418

它是在当第二位<第一位时就需要将第一位-1,结尾补9

four:
答案可想而之,还是有测试点无法通过,比如

99998

five:
最后我还是总结一下思路,利用了一个first指针,来识别截取的位置
首先,你会发现这道题的特点
它相邻两位的只有三种情况
一:前一位>后一位
二:前一位=后一位
三:前一位<后一位
真对这三种情况分别进行讨论:
一:前一位>后一位

  • 这说明此时已经不符合题目要求,再往后判断已经没有意义,所以需要记录前一位的下标,break

二:前一位=后一位

  • 这种情况的话还需要继续判断,比如

339967

  • 此时判断完33之后并不能代表着结束,所以需要continue跳过

三:前一位<后一位

  • 这种情况需要记录first的下标,因为它代表着当后面一旦出现不符合条件的值时可以从first下标进行-1操作,并在结尾补9

并且我发现有first还可以判断正序的数字,比如1234,因为当first==len(str(n))-1时,这时代表是正序,当然除了正序的情况还有另一种需要特殊考虑的,比如11,它需要用一个length来识别,当他等于数字的长度时,则代表他也属于可以直接输出结果的那种。

至此,这道题就完美收官!

738.单调递增的数字相关推荐

  1. 738. 单调递增的数字

    链接:738. 单调递增的数字 题解:https://leetcode-cn.com/problems/monotone-increasing-digits/solution/dan-diao-di- ...

  2. 力扣刷题day32|738单调递增的数字、714买卖股票的最佳时机含手续费、968监控二叉树

    文章目录 738. 单调递增的数字 思路 难点:遍历顺序 难点:设置flag 714. 买卖股票的最佳时机含手续费 贪心思路 难点 968. 监控二叉树 思路 难点:如何隔两个节点放一个摄像头 738 ...

  3. Java实现 LeetCode 738 单调递增的数字(暴力)

    738. 单调递增的数字 给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增. (当且仅当每个相邻位数上的数字 x 和 y 满足 x <= ...

  4. 代码随想录训练营第37天|738.单调递增的数字、968.监控摄像头

    738.单调递增的数字.968.监控摄像头 738.单调递增的数字 对于单调递增的数字,我们可以逆序遍历一下数组,如果每个位置的数字都满足小于下一个位置,则说明这个位置满足条件. 如果一个数字不满足条 ...

  5. Leecode 738. 单调递增的数字 贪心

    原题链接:Leecode 738. 单调递增的数字 代码写的是真烂,,,可读性就是"仅自己可读"的程度... class Solution {public:int monotone ...

  6. [Leetcode]738. 单调递增的数字

    当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的. 给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 . 示例 1: 输入: ...

  7. LeetCode-Algorithms-[Mid]738. 单调递增的数字

    给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增. (当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单 ...

  8. _32LeetCode代码随想录算法训练营第三十二天-贪心算法 | 738.单调递增的数字 、714.买卖股票的最佳时机含手续费、968.监控二叉树

    _32LeetCode代码随想录算法训练营第三十二天-贪心算法 | 738.单调递增的数字 .714.买卖股票的最佳时机含手续费.968.监控二叉树 题目列表 738.单调递增的数字 714.买卖股票 ...

  9. 代码随想录算法训练营第37天|738. 单调递增的数字,714. 买卖股票的最佳时机含手续费,968. 监控二叉树

    Day 37 738. 单调递增的数字 class Solution { public:int monotoneIncreasingDigits(int n) {string strN = to_st ...

最新文章

  1. Android开发历程_18(XML文件解析)
  2. Python将被加入高考科目?你怎么看?
  3. 小结spring和struts整合的三类方式
  4. windows挂载linux网络文件系统NFS
  5. cesium 局部加载_cesium自定义气泡窗口infoWindow后续优化篇 - GIS之家
  6. mariadb安装_MariaDB CentOS 安装的时候如何确定 Repo 地址
  7. 如何彻底删除nginx
  8. 数据库errno: 1045的解决办法
  9. u盘启动盘制作工具多个linux,多系统U盘启动盘制作工具
  10. gomarket服务器位置,V712双核版机型常见问题集解答.pdf
  11. 唐老师讲运算放大器(第五讲)——运放的应用
  12. 在Ext JS本地化
  13. 青少年软件编程(Python)等级考试试卷(一级)
  14. 如何使用mp4v2解析mp4文件,抽取音视频数据帧【源码】【mp4】【NVR】
  15. [LeetCode] Sqrt(int x)解题报告之无限逼近(牛顿法)
  16. ES6 -- 简单笔记总结
  17. Elliptic Labs与Syntiant携手为Bosch的spexor设备打造持续在线的超低功耗体验
  18. 发现一款比较强大的web打印工具HttpPrinter
  19. 干货丨Ceph 日常运维常见难点及故障解决
  20. spring简介和IOC

热门文章

  1. 徐小平关于区块链的言论是否言过其实
  2. RabbitMQ Centos7 安装以及使用
  3. typescript官方中文文档,typescript是什么意思
  4. 程序开发性能调优之如何降低CPU使用率。
  5. 记录一次玩客云安装homeassistent
  6. 使用 shell 脚本拼接 srt 字幕文件 (srtcat)
  7. 类似于APICloud的H5应用服务端加密客户端动态解密的增强版H5应用加固方案
  8. 飞行堡垒9玩游戏掉帧严重,亲测有效。
  9. DOS下读取4GB内存——梁肇新代码分析
  10. 一篇文章帮你了解LoRaWAN特性【转自微信公众号 智联网事】