单调递增的数字
Question
当且仅当每个相邻位数上的数字x
和y
满足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)