- 单调递增的数字
当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。
给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。
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));
}
}