力扣:单调递增的数字

题目描述

给定一个非负整数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('')));
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值