0
点赞
收藏
分享

微信扫一扫

字典序排数(2022-4-18)每日一练

color_小浣熊 2022-04-18 阅读 43

386. 字典序排数(2022-4-18)

给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。

你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。

示例 1:

示例 2:

提示:

  • 1 <= n <= 5 * 104

解题思路

此题类似于440. 字典序的第K小数字,相当于前置题,如果这个题写出来了,倒也可以挑战一下440.

首先是想到了API大法,sort默认是字典序的,所以用一个[1,n]的数组直接sort就OK了;先把数组填充好,然后sort;或者直接一行解决!用map和索引填充数组。

正解的话就是DFS了,把1后边的10、11等看作节点1的子树,然后进行「前序遍历」,也就是深搜;把1开头的遍历完,再开始2开头的(差不多是这么个意思)

插一句,440也是用的深搜去确定当前数的位置,然后逐步找到第k位。

var lexicalOrder = function(n) {
	let ret = new Array(n)
    for(let i = 1; i <= n; i++){
        ret[i-1] = i
    }
    return ret.sort()
    // 或者一行解决
    return new Array(n).fill(0).map((v,i) => i + 1).sort()
    // 再或者来个正经的DFS
    let cur = 1,ret = []
    for(let i = 0; i < n; i++){
        ret.push(cur)
        if(cur * 10 <= n) cur *= 10
        else{
            while(cur % 10 == 9 || cur >= n) cur = (cur/10) | 0
            cur++
        }
    }
    return ret
}

举报

相关推荐

0 条评论