题目
738. 单调递增的数字
思路
- 假如后一个数字比前一个小,那前一个就得减一,然后后一个就得变成9,比如76,得变成69
- 从后往前遍历(不然需要不断的重新更新),比如321,比较n[0]和n[1]后变成了291,比较n[1], n[2]然后219,2又比1大
- 注意类似于100这样的例子,如果只靠上述的逻辑处理完是90,因为0 === 0所以第二个零没有变,这时需要一个记录最早的9位置的tag
代码
var monotoneIncreasingDigits = function(n) {
let val = String(n).split('').map(item => +item);
let tag = Infinity;
if(val.length === 1) return n;
for(let i = val.length - 1; i > 0; i--){
if(val[i - 1] > val[i]){
val[i - 1] -= 1;
val[i] = 9;
tag = i;
}
}
for(let i = tag; i < val.length;i++){
val[i] = 9;
}
return + val.join("") ;
};