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

示例 1:
输入: N = 10
输出: 9

示例 2:
输入: N = 1234
输出: 1234

示例 3:
输入: N = 332
输出: 299
————————————————————————————————————————————————————————
这道题贪心算法思路就是:
局部最优:遇到strNum[i - 1] > strNum[i]的情况,让strNum[i - 1]–,然后strNum[i]给为9,保证变成最大单调递增
全局最优:得到小于等于n的最大单调递增函数

这里需要注意,遍历要从个位开始,即从后向前遍历,
还有这里str[i]变成9需要单独整体操作,所以需要一个flag来标记9是从哪开始的
开始我就踩了这个坑,代码是

class Solution {public:int monotoneIncreasingDigits(int n) {string strNum = to_string(n);for (int i = strNum.size() - 1; i > 0; --i) {if (strNum[i - 1] > strNum[i]) {strNum[i] = '9';strNum[i - 1]--;}}return stoi(strNum);}
};

这样就会在一些情况下出问题,如n为100时会输出90,而实际上我们需要的是99;
正确代码如下:

class Solution {public:int monotoneIncreasingDigits(int n) {string strNum = to_string(n);//这个初始化是防止第一个for循环没有执行的情况int flag = strNum.size();for (int i = strNum.size() - 1; i > 0; --i) {if (strNum[i - 1] > strNum[i]) {flag = i;strNum[i - 1]--;}}for (int i = flag; i < strNum.size(); ++i) {strNum[i] = '9';}return stoi(strNum);}
};

738. 单调递增的数字(贪心算法)相关推荐

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

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

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

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

  3. D37 738.单调递增的数字 968.监控二叉树 + 贪心算法总结

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

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

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

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

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

  6. 738.单调递增的数字,714. 买卖股票的最佳时机含手续费,968.监控二叉树

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

  7. 738. 单调递增的数字

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

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

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

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

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

  10. 738.单调递增的数字

    ''' Description: 738.单调递增的数字 Autor: 365JHWZGo Date: 2021-11-10 09:34:56 LastEditors: 365JHWZGo LastE ...

最新文章

  1. 局域网内同时使用两台路由器的配置方法
  2. 使用变量_存储过程和函数及变量的使用
  3. 实验一 线性表的顺序存储与实现_数据结构篇之单链表的创建以及实现
  4. cocos2dx基础篇(26)——场景切换CCTransitionScene
  5. java 8009_[转]Tomcat的8009端口AJP的利用
  6. QT中信号与槽的常见使用
  7. 面向对象中多个对象之间的关系
  8. Atitit 卡片管理指南规范 attilax总结(内部身份卡,饭卡,交通卡 银行卡等)
  9. stata 空间杜宾模型_空间面板数据模型及Stata实现
  10. selenium模拟键盘操作大全
  11. ios苹果手机 uniapp长按识别二维码图片白色背景问题
  12. microsoft store 微软应用商店打不开?所有教程都尝试了一遍,居然是因为这个
  13. 测试/开发程序员值这么多钱么?“我“不会愿赌服输......
  14. 蔚来:汽车行业变革时代的人才招聘与培养战略
  15. CCF- CSP 202209-1如此编码 按部就班 满分题解
  16. dac0832三角波c语言程序,单片机控制DAC0832输出正弦波三角波汇编程序
  17. 劳伦-杰克逊日记里对姚明的真情告白
  18. SAS语言与算法介绍
  19. LeetCode题集 —— 调整数组顺序使奇数位于偶数前面 + 移动零
  20. 拆解报告:爱否开物1A2C 65W PD氮化镓充电器智融SW3516十分表现抢眼

热门文章

  1. 数据中心行业在能源转型中将发挥重要作用
  2. “数据中心运维管理VIP学习群”问题汇总(一)
  3. -32767转化为二进制_程序员需要了解的硬核知识之二进制
  4. github 删除分支_Github新手入门指南
  5. oracle 信用检查,Oracle EBS 信用(Credit)额度(1)-基础设置
  6. 成功解决AttributeError: module ‘dask.array.numpy_compat‘ has no attribute ‘take_along_axis‘
  7. Dataset之Knifey-Spoony:Knifey-Spoony数据集的简介、下载、使用方法之详细攻略
  8. 成功解决AttributeError: 'DataFrame' object has no attribute 'reshape'
  9. Ubuntu系统Apache2部署SSL证书
  10. Qt窗口部件与布局之二:布局管理