给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。 (当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。) 示例 1: 输入: N = 10 输出: 9 示例 2: 输入: N = 1234 输出: 1234 示例 3: 输入: N = 332 输出: 299 说明: N 是在 [0, 10^9] 范围内的一个整数。 Related Topics 贪心算法 👍 149 👎 0
//解答成功: 执行耗时:1 ms,击败了97.96% 的Java用户 内存消耗:35.4 MB,击败了62.72% 的Java用户
class Solution {
public int monotoneIncreasingDigits(int N) {
int len = (int) (Math.log10(N)+1);
int[] arr = new int[len];
for(int i=len-1;i>=0;i--){
arr[i]=N%10;
N/=10;
}
boolean equalChange = false;
int i=0,index=1,equal=0,MaxIndex = 0;
while (i<arr.length-1) {
if (arr[i] < arr[index]) {
i++;
index++;
equalChange = false;
} else if (arr[i] == arr[index]) {
if (!equalChange)
equal = i;
equalChange = true;
i++;
index++;
}
else if (arr[i] > arr[index] ) {
if(equalChange)
MaxIndex = equal;
else
MaxIndex = i;
arr[MaxIndex]--;
for (int j=MaxIndex+1;j<len;j++)
arr[j]=9;
break;
}else
System.out.println(11);
}
double res=0;
for (i=0;i<len;i++) {
res += arr[i];
//System.out.println("--"+res);
res *= 10;
}
return (int) (res/10);
}
}