讨论/题目交流/🐱 力扣第 10 场夜喵双周赛/
🐱 力扣第 10 场夜喵双周赛

欢迎在这里交流分享你的参赛心得以及体验。【前往竞赛
image.png

展开讨论

关于第三题 步进数,初步想法是跟 "丑数" 差不多,按1-9的顺序,以数字首位为key构造map,比如'10'=>['010','210'],大于 low 开始入 res,直到步进数大于 high 返回 res
可是写法有点臃肿,求更好的办法 or 写法!
【JavaScript】

/**
 * @param {number} low
 * @param {number} high
 * @return {number[]}
 */
var countSteppingNumbers = function(low, high) {
    let res = []
    let newMap = {}
    let map = {
        0: ['01'],
        1: ['10','12'],
        2: ['21','23'],
        3: ['32','34'],
        4: ['43','45'],
        5: ['54','56'],
        6: ['65','67'],
        7: ['76','78'],
        8: ['87','89'],
        9: ['98']
    }
    if(high < 10 && low < 10) {
        for(let i=low;i<high;i++) {
            res.push(i)
        }
    } else {
        for(let i=low;i<10;i++) {
            res.push(i)
        }
        while(1) {
            newMap = {
                0: [], 1: [], 2: [], 3: [], 4: [], 5: [], 6: [], 7: [], 8: [], 9: []
            }
            for(let i=0;i<=9;i++) {
                let arr = map[i]
                let newArr = []
                for(let j=0;j<arr.length;j++) {
                    if(i > 0 && +arr[j] >= low) { // 0 开头的不入res,小于low的不入res
                        if(+arr[j] <= high) {
                            res.push(+arr[j])
                        } else { // 只要大于high,就返回res
                            return res
                        }
                    }
                    // 更新map
                    if(i > 0) {
                        newMap[i-1].push(i-1 + arr[j])
                    }
                    if(i < 9) {
                        newMap[i+1].push(i+1 + arr[j])
                    }
                }
            }
            // 更新map
            map = newMap
        }
    }
};
展开全部 8 讨论