题目描述
给定一个非负整数N,找出小于或等于N的最大的整数,同时这个整数需要满足其各个位数上数字时单调递增(当切仅当每个相邻位数上的数字x和y满足x<=y时,我们称这个整数时单调递增的)
思路
如果只有一位数字,则直接返回该数字。将N转化为数组,依次遍历,如果前一位大于后面一位,则前一位减一,并将后面的值全部置为9。最后再将数组转化为数字返回
程序实现
/**
* @param {number} N
* @return {number}
*/
var monotoneIncreasingDigits = function(N) {
// 先将数字变成数组
var arr = N.toString().split('');
if(arr.length==1) return (parseInt(arr.join));
// 循环遍历数组
for(let i = 0 ; i < arr.length-1; i++) {
// 如果前一位大于后面一位
if(arr[i] > arr[i+1]) {
// 则将前一位减一
arr[i] = arr[i] - 1;
// 再继续数组后面的值,将其全部赋值为9
for(let j = i+1; j< arr.length; j++) {
arr[j] = '9';
}
// 将i置为负一,可以跳出循环
i = -1;
}
}
// 最后将数组转化为字符串,然后再转为Number
return (parseInt(arr.join('')));
};