package com.heu.wsq.leetcode;
/**
* 738. 单调递增的数字
* @author wsq
* @date 2020/12/15
* 给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。
*
* (当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)
*
* 示例 1:
*
* 输入: N = 10
* 输出: 9
* 示例 2:
*
* 输入: N = 1234
* 输出: 1234
*
* 链接:https://leetcode-cn.com/problems/monotone-increasing-digits
*/
public class MonotoneIncreasingDigits {
/**
* 贪心思想,在原数字每一位上寻找出第一个不符合递增的索引
* 然后跟将所有索引以后的位全部变成9,即是最大、最贴近原数的数字
* @param N
* @return
*/
public int monotoneIncreasingDigits(int N){
char[] strN = Integer.toString(N).toCharArray();
int i = 1;
while (i < strN.length && strN[i - 1] <= strN[i]){
i++;
}
if (i < strN.length){
while (i > 0 && strN[i - 1] > strN[i]){
strN[i - 1] -= 1;
i -= 1;
}
for (i += 1; i < strN.length; i++){
strN[i] = '9';
}
}
return Integer.parseInt(new String(strN));
}
public static void main(String[] args) {
int N = 100;
MonotoneIncreasingDigits mi = new MonotoneIncreasingDigits();
int ans = mi.monotoneIncreasingDigits(N);
System.out.println(ans);
}
}