面试必看:单调递增的数字
学习笔记LeetCode 738. 单调递增的数字题目描述当且仅当每个相邻位数上的数字x xx和y yy满足x ≤ y x \le yx≤y时我们称这个整数是单调递增数字。给定一个整数n nn返回小于或等于n nn的最大单调递增数字。示例输入n 10 n10n10输出9 99输入n 1234 n1234n1234输出1234 12341234输入n 332 n332n332输出299 299299数据范围0 ≤ n ≤ 10 9 0 \le n \le 10^90≤n≤1091. 算法分类贪心类本题是贪心算法在数位操作场景的经典应用依托局部最优推导全局最优的核心思想实现求解。2. 问题核心特征与算法适配性分析核心特征硬性约束目标数字每一位必须满足非递减单调递增即s [ i ] ≤ s [ i 1 ] s[i] \le s[i1]s[i]≤s[i1]优化目标在满足约束的前提下找到小于等于原数的最大值高位数值优先级远高于低位处理形式整数适合转换为字符串进行逐位修改、遍历操作大幅简化数位处理逻辑。为什么适配贪心算法策略匹配需求贪心算法优先保证高位数字尽可能大通过局部数位的修正直接推导出全局最优解完美契合本题的优化目标效率最优仅需两次线性遍历数字位数时间复杂度极低远优于暴力枚举等方案操作简洁针对违规数位执行退位修正后置位补9逻辑直观易实现无复杂计算。备选方案对比解法时间复杂度空间复杂度弃选原因暴力枚举O ( n ⋅ l e n ) O(n \cdot len)O(n⋅len)O ( 1 ) O(1)O(1)n nn最大为10 9 10^9109会直接超时无法通过测试动态规划O ( l e n ⋅ 10 ) O(len \cdot 10)O(len⋅10)O ( l e n ⋅ 10 ) O(len \cdot 10)O(len⋅10)状态定义繁琐实现复杂相比贪心无效率与编码优势3. 问题关键词单调递增数字、非递减数位、最大取值、贪心算法、数位处理、退位补9、字符串转换4. 解题模式识别题型定位本题属于数位约束类贪心问题具备标准化解题特征对整数的每一位数字定义明确约束条件求解满足约束条件的极值数字最大值/最小值通用解题模板数字转字符串→ \to→定位违规数位→ \to→贪心策略修正→ \to→字符串转回数字。拓展场景该解题模板可迁移至同类数位优化问题如拼接数字得到最大/最小值、带约束的数位构造问题等。5. 问题分析违规判定从前向后遍历若出现s [ i ] s [ i 1 ] s[i] s[i1]s[i]s[i1]则违反单调递增规则连锁反应对当前位退位后可能导致前序数位也产生违规因此选择从后向前遍历一次性处理所有连锁违规问题最优修正规则违规位退位后将其后续所有位置为9能保证修正后的数字是满足条件的最大值边界兼容字符串转整数函数会自动忽略前导零无需额外处理边界用例。6. 解题思路基于贪心策略分三步完成求解步骤1格式转换将整数n nn转换为字符串方便逐位遍历与修改操作。步骤2逆向遍历修正违规位初始化标记位flag标记后续需要置9的起始下标默认值为字符串长度。从倒数第二位开始从后向前遍历字符串若当前位数字s [ i ] s[i] s[i]后一位数字s [ i 1 ] s[i1]s[i1]将当前位退位s[i]--并更新标记位flag i1步骤3统一补9并转换结果从标记位flag开始将后续所有数位置为9最后将修正后的字符串转换为整数即为最终答案。7. 解题代码C#includestringusingnamespacestd;classSolution{public:intmonotoneIncreasingDigits(intn){// 将数字转换为字符串方便逐位操作string sto_string(n);intlens.size();// 标记位记录需要置为9的起始下标初始为字符串长度无违规则不执行置9intflaglen;// 从后向前遍历定位并修正违规数位for(intilen-2;i0;i--){if(s[i]s[i1]){// 当前位退位s[i]--;// 更新标记位后续所有位需要置9flagi1;}}// 将标记位及之后的所有数位统一置为9保证数值最大for(intiflag;ilen;i){s[i]9;}// 字符串转换为整数返回自动忽略前导零returnstoi(s);}};代码关键说明字符串处理规避了数学取位、拼接的复杂运算代码更简洁标记位flag统一记录置9起始位置避免重复遍历提升执行效率逆向遍历解决退位引发的连锁违规问题保证所有数位最终满足约束stoi函数自动处理前导零适配n 0 n0n0等边界场景。8. 复杂度分析时间复杂度O ( l e n ) O(len)O(len)l e n lenlen为数字n nn的位数最多10位。算法包含两次线性遍历整体为常数级别的线性时间复杂度执行效率极高。空间复杂度O ( l e n ) O(len)O(len)用于存储数字对应的字符串属于必要的辅助空间。关键注意事项遍历方向必须采用从后向前遍历才能处理退位带来的前序数位连锁违规问题独立置9统一将标记位后所有位置9是保证结果为最大值的核心操作结果转换利用库函数自动处理前导零简化边界场景的代码逻辑。总结本题最优解法为贪心算法通过退位修正后置位统一补9的策略高效求解目标值核心技巧是将整数转为字符串处理数位搭配逆向遍历解决连锁违规问题该方案是数位约束类贪心题目的通用模板可直接迁移至同类场景。

相关新闻

DHTML使用技巧指南:掌握动态网页核心技术

DHTML使用技巧指南:掌握动态网页核心技术

DHTML(动态HTML)不是单一技术,而是HTML、CSS、JavaScript和文档对象模型(DOM)的组合,用于创建无需重新加载页面即可交互和更新的网页。它使静态网页变得生动,是实现早期富互联网应用的核心技术。…

2026/7/3 14:20:08 阅读更多 →
本科生必看!领军级的一键生成论文工具 —— 千笔·专业论文写作工具

本科生必看!领军级的一键生成论文工具 —— 千笔·专业论文写作工具

你是否曾为论文选题发愁,面对海量文献无从下手?是否在反复修改中感到力不从心,却始终无法达到理想效果?论文写作不仅是学术能力的考验,更是时间与精力的挑战。而今,一款专为学生打造的智能写作工具——千笔…

2026/7/3 14:20:09 阅读更多 →
2026必备!10个降AI率网站,解决论文AI痕迹难题,千笔·专业降AI率智能体

2026必备!10个降AI率网站,解决论文AI痕迹难题,千笔·专业降AI率智能体

AI降重工具的崛起,让论文更“自然” 随着人工智能技术在学术领域的广泛应用,越来越多的学生开始依赖AI工具进行论文写作。然而,AI生成的内容往往带有明显的痕迹,导致论文AIGC率偏高,查重结果不理想。这时候&#xff0c…

2026/7/5 16:58:08 阅读更多 →

最新新闻

ROFLPlayer:英雄联盟回放分析神器,三步解锁你的游戏复盘能力

ROFLPlayer:英雄联盟回放分析神器,三步解锁你的游戏复盘能力

ROFLPlayer:英雄联盟回放分析神器,三步解锁你的游戏复盘能力 【免费下载链接】ROFL-Player (No longer supported) One stop shop utility for viewing League of Legends replays! 项目地址: https://gitcode.com/gh_mirrors/ro/ROFL-Player 还在…

2026/7/6 5:38:39 阅读更多 →
d2s-editor:暗黑破坏神2存档编辑器,轻松管理你的游戏角色数据

d2s-editor:暗黑破坏神2存档编辑器,轻松管理你的游戏角色数据

d2s-editor:暗黑破坏神2存档编辑器,轻松管理你的游戏角色数据 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾为暗黑破坏神2复杂的存档编辑而烦恼?想要调整角色属性却不知从何下手&am…

2026/7/6 5:36:39 阅读更多 →
如何用FanControl打造智能静音电脑:从零基础到专业调校的完整指南

如何用FanControl打造智能静音电脑:从零基础到专业调校的完整指南

如何用FanControl打造智能静音电脑:从零基础到专业调校的完整指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_…

2026/7/6 5:36:39 阅读更多 →
129、轻量化 Head 设计:用 Depthwise Conv 加 1×1 Conv 替代标准检测头卷积

129、轻量化 Head 设计:用 Depthwise Conv 加 1×1 Conv 替代标准检测头卷积

129、轻量化 Head 设计:用 Depthwise Conv 加 1乘1 Conv 替代标准检测头卷积 从一次显存爆炸说起 去年秋天调一个YOLOv11n的工业检测模型,输入分辨率压到640640,batch size设到32,结果RTX 3090直接OOM。排查半天,发现检测头三个分支的卷积层占了将近40%的参数量。当时项目…

2026/7/6 5:32:38 阅读更多 →
5分钟解放双手:League Akari - 英雄联盟玩家的本地化智能助手终极指南

5分钟解放双手:League Akari - 英雄联盟玩家的本地化智能助手终极指南

5分钟解放双手:League Akari - 英雄联盟玩家的本地化智能助手终极指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为游戏中…

2026/7/6 5:30:38 阅读更多 →
AI Agent 链上操作:签名之前先生成可验证计划

AI Agent 链上操作:签名之前先生成可验证计划

AI Agent 链上操作:签名之前先生成可验证计划 一、Agent 不能直接替用户签名 AI Agent 能帮用户分析资产、构造交易、调用合约、提交治理提案。但链上操作一旦签名,就具备真实资产和权限后果。让 Agent 直接决定并发起签名,是非常危险的设计。…

2026/7/6 5:28:37 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻