Skip to content

📚 16.单调递增的数字

💻 代码实现

typescript
/**
 * @url https://leetcode.cn/problems/monotone-increasing-digits/description/
 */

// 当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。
// 给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。
// TODO:遍历顺序,从前到后,不能利用上次已经改变的结果!!!!比如1009 123329,体会一下  从前到后遍历,也会影响前面相应的比较
// notice:这样的方法,没有考虑到前面改变了,后面会改变。应该统一将后面改为9
// function monotoneIncreasingDigits(n: number): number {
//     const arr = n
//         .toString()
//         .split("")
//         .map((_num) => Number.parseInt(_num))
//     for (let i = arr.length - 2; i >= 0; i--) {
//         if (arr[i] > arr[i + 1]) {
//             arr[i] -= 1
//             arr[i + 1] = 9
//         }
//     }
//     return Number.parseInt(arr.join(""))
// }
// TODO:细节挺多的
function monotoneIncreasingDigits(n: number): number {
    const arr = n
        .toString()
        .split("")
        .map((_num) => Number.parseInt(_num))
    let flag = arr.length
    for (let i = arr.length - 2; i >= 0; i--) {
        if (arr[i] > arr[i + 1]) {
            arr[i] -= 1
            flag = i + 1
        }
    }
    for (let i = flag; i < arr.length; i++) {
        arr[i] = 9
    }
    return Number.parseInt(arr.join(""))
}

Released under the MIT License.