'''
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. WPF TreeView HierarchicalDataTemplate
  2. Eclipse 导入 Tomcat 源码
  3. [置顶] 细说Cache
  4. jQuery遍历之next()、nextAll()方法使用实例
  5. [转]Web测试中的界面测试用例设计
  6. Kali Linux 网络扫描秘籍 第四章 指纹识别(三)
  7. 跨界造智能机器人,娃哈哈能“喝”出新辉煌吗
  8. SharePoint 2010 文档管理系列
  9. 平面内 两直线/两向量的夹角方向 逆时针 还是顺时针
  10. 【redies】五种数据类型
  11. C#——SqlParameter的使用方法及注意事项
  12. 我的网名--荡涤心灵
  13. exsi 安装ipmi_在vSphere中为不同服务器配置IPMI功能
  14. 如何设计一个小而美的秒杀系统(抢红包)?
  15. LeetCode881. 救生艇
  16. adb 出现多个设备情况操作解决
  17. Linux 各种压缩、解压命令
  18. 数据库查找姓李的人_假设某数据库表中有一个姓名字段,查找姓李的记录的准则是( )_学小易找答案...
  19. 大数据Spark电影评分数据分析
  20. windows制作proxmox pve U盘镜像

热门文章

  1. 爬山的蜗牛旅程:redis 订阅发布
  2. 一些文章资讯汇总(框架篇)
  3. python中拼音怎么用_实用小技巧,Python一秒将汉字转为拼音
  4. 关于ps cs5的一些问题
  5. BT种子、磁力、ED2K下载工具_wentfar·tsao
  6. 《Adobe Photoshop CS5中文版经典教程(全彩版)》—第2课2.12节保存用于四色印刷的图像...
  7. Iphone/Android开发囧事
  8. 智能化停车无线通信解决方案
  9. Oracle中对列加密的方法
  10. 在郊区发生交通事故的处理流程