738. 单调递增的数字(贪心算法)
给定一个非负整数 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. 单调递增的数字(贪心算法)相关推荐
- Leecode 738. 单调递增的数字 贪心
原题链接:Leecode 738. 单调递增的数字 代码写的是真烂,,,可读性就是"仅自己可读"的程度... class Solution {public:int monotone ...
- _32LeetCode代码随想录算法训练营第三十二天-贪心算法 | 738.单调递增的数字 、714.买卖股票的最佳时机含手续费、968.监控二叉树
_32LeetCode代码随想录算法训练营第三十二天-贪心算法 | 738.单调递增的数字 .714.买卖股票的最佳时机含手续费.968.监控二叉树 题目列表 738.单调递增的数字 714.买卖股票 ...
- D37 738.单调递增的数字 968.监控二叉树 + 贪心算法总结
738.单调递增的数字 1.题目 给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增. (当且仅当每个相邻位数上的数字 x 和 y 满足 x &l ...
- 代码随想录算法训练营第37天|738. 单调递增的数字,714. 买卖股票的最佳时机含手续费,968. 监控二叉树
Day 37 738. 单调递增的数字 class Solution { public:int monotoneIncreasingDigits(int n) {string strN = to_st ...
- 力扣刷题day32|738单调递增的数字、714买卖股票的最佳时机含手续费、968监控二叉树
文章目录 738. 单调递增的数字 思路 难点:遍历顺序 难点:设置flag 714. 买卖股票的最佳时机含手续费 贪心思路 难点 968. 监控二叉树 思路 难点:如何隔两个节点放一个摄像头 738 ...
- 738.单调递增的数字,714. 买卖股票的最佳时机含手续费,968.监控二叉树
738. 单调递增的数字 当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的. 给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 ...
- 738. 单调递增的数字
链接:738. 单调递增的数字 题解:https://leetcode-cn.com/problems/monotone-increasing-digits/solution/dan-diao-di- ...
- Java实现 LeetCode 738 单调递增的数字(暴力)
738. 单调递增的数字 给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增. (当且仅当每个相邻位数上的数字 x 和 y 满足 x <= ...
- 代码随想录训练营第37天|738.单调递增的数字、968.监控摄像头
738.单调递增的数字.968.监控摄像头 738.单调递增的数字 对于单调递增的数字,我们可以逆序遍历一下数组,如果每个位置的数字都满足小于下一个位置,则说明这个位置满足条件. 如果一个数字不满足条 ...
- 738.单调递增的数字
''' Description: 738.单调递增的数字 Autor: 365JHWZGo Date: 2021-11-10 09:34:56 LastEditors: 365JHWZGo LastE ...
最新文章
- 局域网内同时使用两台路由器的配置方法
- 使用变量_存储过程和函数及变量的使用
- 实验一 线性表的顺序存储与实现_数据结构篇之单链表的创建以及实现
- cocos2dx基础篇(26)——场景切换CCTransitionScene
- java 8009_[转]Tomcat的8009端口AJP的利用
- QT中信号与槽的常见使用
- 面向对象中多个对象之间的关系
- Atitit 卡片管理指南规范 attilax总结(内部身份卡,饭卡,交通卡 银行卡等)
- stata 空间杜宾模型_空间面板数据模型及Stata实现
- selenium模拟键盘操作大全
- ios苹果手机 uniapp长按识别二维码图片白色背景问题
- microsoft store 微软应用商店打不开?所有教程都尝试了一遍,居然是因为这个
- 测试/开发程序员值这么多钱么?“我“不会愿赌服输......
- 蔚来:汽车行业变革时代的人才招聘与培养战略
- CCF- CSP 202209-1如此编码 按部就班 满分题解
- dac0832三角波c语言程序,单片机控制DAC0832输出正弦波三角波汇编程序
- 劳伦-杰克逊日记里对姚明的真情告白
- SAS语言与算法介绍
- LeetCode题集 —— 调整数组顺序使奇数位于偶数前面 + 移动零
- 拆解报告:爱否开物1A2C 65W PD氮化镓充电器智融SW3516十分表现抢眼
热门文章
- 数据中心行业在能源转型中将发挥重要作用
- “数据中心运维管理VIP学习群”问题汇总(一)
- -32767转化为二进制_程序员需要了解的硬核知识之二进制
- github 删除分支_Github新手入门指南
- oracle 信用检查,Oracle EBS 信用(Credit)额度(1)-基础设置
- 成功解决AttributeError: module ‘dask.array.numpy_compat‘ has no attribute ‘take_along_axis‘
- Dataset之Knifey-Spoony:Knifey-Spoony数据集的简介、下载、使用方法之详细攻略
- 成功解决AttributeError: 'DataFrame' object has no attribute 'reshape'
- Ubuntu系统Apache2部署SSL证书
- Qt窗口部件与布局之二:布局管理