题目描述:
当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。
给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。
解题思路:
- 先将int变成char[],获取数字的长度方便遍历;
- 倒着遍历数组,当前一位 > 后一位,就将高位-1,用一个标识flag标记当前位置,flag初始化为数组的长度,标识的作用是用来获取从哪一位开始后面的数字都要变成9;
- 返回结果,注意将char[] 变为 int需要通过转为String来实现,char[] -> String -> int,先new String,再用包装类。
代码实现
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));
}
}