Leetcode 738.单调递增的数字
题目:738.单调递增的数字
初始思路
代码
var monotoneIncreasingDigits = function (n) {
n = n.toString() // 数字转为字符串,方便使用下标
n = n.split('').map(item => {
return parseInt(item) // 转为数组
})
let flag = Infinity // 标记从哪位开始要变成9
for (let i = n.length - 1; i > 0; i--){
if (n[i - 1] > n[i]) {
//前一个大于后一位,前一位减1,后面的全部置为9
flag = i
n[i - 1]--
n[i] = 9
}
}
// 从标记位一直到最后都改成9
for (let i = flag; i < n.length; i++){
n[i] = 9
}
n = n.join('')
return parseInt(n)
};
感想
- 局部最优:遇到strNum[i - 1] > strNum[i]的情况,让strNum[i - 1]—,然后strNum[i]给为9,可以保证这两位变成最大单调递增整数。全局最优:得到小于等于N的最大单调递增的整数。
- 思路很精妙,多看看讲解。