LeetCode-738-单调递增的数字

题目描述:

当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。

给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。

解题思路:

  1. 先将int变成char[],获取数字的长度方便遍历;
  2. 倒着遍历数组,当前一位 > 后一位,就将高位-1,用一个标识flag标记当前位置,flag初始化为数组的长度,标识的作用是用来获取从哪一位开始后面的数字都要变成9;
  3. 返回结果,注意将char[] 变为 int需要通过转为String来实现,char[] -> String -> int,先new String,再用包装类。
    代码实现
java 复制代码
class Solution {
    public int monotoneIncreasingDigits(int n) {
        char[] str = Integer.toString(n).toCharArray();// int -> String
        int flag = str.length;// 标识,从 flag位开始后面全部为 9
        for (int i = str.length-1; i >0 ; i--) { // 从后往前遍历
            if (str[i-1] > str[i]){// 需要进行高位-1的操作
                str[i-1] -= 1;
                flag = i;
            }
        }
        // 将 flag后面的数字全部变为 9
        for (int j = flag; j < str.length; j++) {
            str[j] = '9';
        }
        // char[] ->String的方法:new String(str)
        return Integer.parseInt(new String(str));
    }
}
相关推荐
网安INF6 分钟前
SHA-1算法详解:原理、特点与应用
java·算法·密码学
编程绿豆侠18 分钟前
力扣HOT100之贪心算法:45. 跳跃游戏 II
leetcode·游戏·贪心算法
无聊的小坏坏21 分钟前
从数学到代码:一文详解埃拉托色尼筛法(埃式筛)
算法
Gyoku Mint1 小时前
机器学习×第七卷:正则化与过拟合——她开始学会收敛,不再贴得太满
人工智能·python·算法·chatgpt·线性回归·ai编程
黑听人1 小时前
【力扣 中等 C++】90. 子集 II
开发语言·数据结构·c++·算法·leetcode
黑听人1 小时前
【力扣 简单 C】21. 合并两个有序链表
c语言·开发语言·数据结构·算法·leetcode
励志成为大佬的小杨2 小时前
时间序列基础
人工智能·算法
黑听人2 小时前
【力扣 简单 C】83. 删除排序链表中的重复元素
c语言·开发语言·数据结构·算法·leetcode
微凉的衣柜2 小时前
机器人导航中的高程图 vs 高度筛选障碍物点云投影 —— 如何高效处理避障问题?
算法·机器人
Shaun_青璇2 小时前
Cpp 知识3
开发语言·c++·算法