Leetcode 738.单调递增的数字
题目:738.单调递增的数字
初始思路
代码
var monotoneIncreasingDigits = function (n) {n = n.toString() // 数字转为字符串,方便使用下标n = n.split('').map(item => {return parseInt(item) // 转为数组})let flag = Infinity // 标记从哪位开始要变成9for (let i = n.length - 1; i > 0; i--){if (n[i - 1] > n[i]) {//前一个大于后一位,前一位减1,后面的全部置为9flag = in[i - 1]--n[i] = 9}}// 从标记位一直到最后都改成9for (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的最大单调递增的整数。
- 思路很精妙,多看看讲解。
