Skip to content
On this page

单调递增的数字

Question

当且仅当每个相邻位数上的数字xy满足x <= y时,我们称这个整数是单调递增的。

给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增

思路

  • 单独考虑个位数和10的情况
  • 先将 n从前往后依次放入栈中,个位在前,十位在后
  • flag记录从哪一位开始都变为9(关键)
  • 从后往前遍历数组,求出结果
js
var monotoneIncreasingDigits = function(n) {
    let num = []
    let res = 0 
    if(n<10)    return n
    if(n===10)  return 9 
    while(n>0){			//将 n 从前往后依次放入栈
       num.push(n%10)
       n = Math.floor(n/10)
    }
    let flag = -1   //记录从哪一位开始都变为9
    for(let i=0;i<num.length-1;i++){
        if(num[i]<num[i+1]){    //不是单调递增的
            flag = i
            num[i+1]--
        }
    }
    for(let i=num.length-1;i>=0;i--){
        res*=10
        if(i<=flag) num[i] = 9
        res += num[i]
    }
    return res
};

注意JS中整除的写法:n = Math.floor(n/10)