题解
如果不符合题目要求的条件,即前一个数大于后一个数,那么如果前一个数字不变,后一个数字如果减小,那么肯定还是小于前一个数,如果后一个数字增大,那么会超过原来的数字,不符合条件。因此,只能前一个数字减1。
如果从前往后遍历,前一个数大于后一个数,前一个数字减1,但是可能又会小于“它”的前一个数字。因此从后往前遍历,可以重复利用上次比较得出的结果。
class Solution {
public int monotoneIncreasingDigits(int n) {
String a=String.valueOf(n);
char[] b=a.toCharArray();
int start=b.length;
for(int i=b.length-2;i>=0;i--){
if(b[i]>b[i+1]){
b[i]-=1;
start=i+1;
}
}
for(int i=start;i<=b.length-1;i++){
b[i]='9';
}
return Integer.parseInt(String.valueOf(b));
}
}