单调递增的数字
当且仅当每个相邻位数上的数字 x
和 y
满足 x <= y
时,我们称这个整数是单调递增的。
给定一个整数 n
,返回 小于或等于 n
的最大数字,且数字呈 单调递增 。
public int monotoneIncreasingDigits(int n) {
if(n<10){
return n;
}
int len = String.valueOf(n).length();
int[] res = new int[len];
int preN = n;
boolean flag = true;
while(n!=0){
int tmp = n%10;
res[len-1] = tmp;
if(len < res.length && res[len-1] > res[len]){
flag = false;
}
n = n/10;
len--;
}
if(flag){
return preN;
}
for (int i = 0; i < res.length; i++) {
if(res[i] > res[i+1]){
while(i > 0 && res[i] <= res[i-1]){
i--;
}
res[i]--;
for (int i1 = i+1; i1 < res.length; i1++) {
res[i1] = 9;
}
break;
}
}
int resNum = 0;
for (int i = res.length-1; i >= 0; i--) {
resNum += res[i]*Math.pow(10,res.length-1-i);
}
return resNum;
}
贪心,找到符合单调递增序列的后一个数字-1,后面的全部设置为9