单调递增的数字【贪心算法】

  1. 单调递增的数字
    当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。
    给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。
java 复制代码
public class Solution {
    public int monotoneIncreasingDigits(int N) {
        // 将整数N转换为字符串
        String strNum = Integer.toString(N);
        // flag用来标记赋值9从哪里开始
        // 设置为这个默认值,为了防止第二个for循环在flag没有被赋值的情况下执行
        int flag = strNum.length();
        // 将字符串转换为字符数组,以便后续修改字符
        char[] numArray = strNum.toCharArray();
        
        // 从字符串的末尾向前遍历,查找需要减少的位置
        for (int i = strNum.length() - 1; i > 0; i--) {
            // 如果当前字符比下一个字符大,则需要减少当前字符的值
            if (numArray[i - 1] > numArray[i]) {
                // 标记需要减少的位置
                flag = i;
                // 减少当前字符的值
                numArray[i - 1]--;
            }
        }
        
        // 将标记位置之后的所有字符都设置为'9'
        for (int i = flag; i < strNum.length(); i++) {
            numArray[i] = '9';
        }
        
        // 将字符数组转换回整数并返回(将字符数组转换为字符串,这是因为Integer.parseInt方法需要一个字符串作为参数)
        return Integer.parseInt(new String(numArray));
    }
}
相关推荐
折哥的程序人生 · 物流技术专研7 小时前
Java面试85题图解版 · 特别篇:2026后端高频面试题复盘(算法底层逻辑+高并发架构设计全解析,附Java实战代码)
java·网络·数据库·算法·面试
想吃火锅10058 小时前
【leetcode】14.最长公共前缀js
算法·leetcode·职场和发展
云絮.10 小时前
数据库操作
数据库·mysql·算法·oracle
小林ixn10 小时前
LeetCode 206. 反转链表(迭代 + 递归详解)
算法·leetcode·链表
凡人叶枫10 小时前
Effective C++ 条款17:以独立语句将 newed 对象置入智能指针
java·linux·开发语言·c++·算法
菜鸟‍12 小时前
LeetCode 1 27 和 704 || 两数之和 移除元素 二分查找
算法·leetcode·职场和发展
退休倒计时13 小时前
【每日一题】LeetCode 142. 环形链表 II TypeScript
算法·leetcode·链表·typescript
popcorn_min13 小时前
Digits 手写数字识别:随机森林多分类 + 像素级特征热力图
算法·随机森林·分类
liulilittle14 小时前
拥塞控制:排水终止的两种决策:OR 与 AND
网络·tcp/ip·计算机网络·算法·信息与通信·tcp·通信
weixin_3077791314 小时前
从脚本执行到智能体协作:AI辅助测试能力的范式重构
运维·开发语言·人工智能·算法·测试用例