保证数字单调递增,就需要保证从个位数起依次递减,若十位和个位不符合递减规则,则十位将减一,个位将置为9.大致思路就是如此。但是有几个细节还需注意。
这里是数字,怎么比较好的对其各个位进行处理呢?这里是通过将数字转为字符串,然后将字符串转为字符数组来进行遍历比较。最后将字符数组转为字符串再转为数字返回。
然后这里是设置一个标志位来记录要置9的区间。因为如果不符合规则才置9的话,遇到1000这种特殊情况结果就是900,不符合条件,所以需要一个标志位来记录一个区间。
class Solution {
public int monotoneIncreasingDigits(int n) {
String str=Integer.toString(n);
char[] arr=str.toCharArray();
int flag=arr.length;
for(int i=arr.length-1;i>0;i--){
if(arr[i-1]>arr[i]){
arr[i-1]--;
flag=i;
}
}
for(int i=flag;i<arr.length;i++){
arr[i]='9';
}
return Integer.parseInt(String.valueOf(arr));
}
}
此题困难,二刷再解决