386. 字典序排数

字典序排数

题目描述:

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

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

示例 1:

输入:n = 13
输出:[1,10,11,12,13,2,3,4,5,6,7,8,9]
示例 2:

输入:n = 2
输出:[1,2]

提示:

1 <= n <= 5 * 104

思路:

时间复杂度:O(n),空间复杂度O(1)

Dfs 爆搜,每次都*10或者+1,只有这两种情况

代码:

func lexicalOrder(n int) []int {
    var res []int
    var dfs func(x int)

    dfs = func(x int){
        if x >n{
            return 
        }
        res =append(res, x)
        dfs(x*10)
        
        if x >=10 && x % 10 <=8 {
            dfs(x+1)
        }
        
    }
    for i:=1;i<=9;i++{
        dfs(i)
    }
    
    return res
}

代码效率:

执行用时:8 ms, 在所有 Go 提交中击败了85.14%的用户
内存消耗:6.4 MB, 在所有 Go 提交中击败了11.49%的用户


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!