题目:
分析:如何找到一个小于或等于N的最大整数,并且各个位数上的数字时单调递增的。很容易想到的一个思路是后部分用尽量多的9,前一部分数值最大,这样拼在一起就可以得到一个小于或等于N的最大整数
剩下的问题就是如何找到9的开始位置,考虑条件各个位数上的数字要单调递增,那么如果能找到那个不再递增第一次下降的位置,从这个位置开始往前逐一减小前一个位置的大小,直到当前位置不小于前一个位置就停下来,再从停下来的位置的下一个开始填充9即可
代码:
class Solution {
public int monotoneIncreasingDigits(int N) {
char[] S = String.valueOf(N).toCharArray();
int i = 1;
while (i < S.length && S[i-1] <= S[i]){
i++;
}
while (0 < i && i < S.length && S[i-1] > S[i]){
S[--i]--;
}
for (int j = i+1; j < S.length; ++j){
S[j] = '9';
}
return Integer.parseInt(String.valueOf(S));
}
}