题目:
当且仅当每个相邻位数上的数字 x
和 y
满足 x <= y
时,我们称这个整数是单调递增的。
给定一个整数 n
,返回 小于或等于 n
的最大数字,且数字呈 单调递增 。
示例 1:
输入: n = 10 输出: 9
示例 2:
输入: n = 1234 输出: 1234
示例 3:
输入: n = 332 输出: 299
解题思路:首先每次取整数的两位,从后往前取,接着来比较高位和低位的大小关系,若高位小于低位,则高位变为9,低位-1,采用循环来将高位抹0,再整体-1就实现了。
代码如下:
class Solution {
public int monotoneIncreasingDigits(int n) {
int i = 1;
int res = n;
while(i <= res/10){
int temp = res / i % 100;// 每次取两个位
i *= 10;
if(temp / 10 > temp % 10){ // 比较的高一位大于底一位
res = res / i * i - 1; //像332 循环第一次变为330-1=329 第二次变为300-1=299
}
}
return res;
}
}
运行结果如下: