【每日一题】386. 字典序排数

【每日一题】386. 字典序排数

我的图图呢 416 2022-04-18

题目

给你一个整数 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

题解

思路

  • 在工作中如果碰到这种,js的sort直接就满足了
  • 题目要求O(n),实际上就是一个深度优先遍历,遍历的思路要清晰

代码

function lexicalOrder(n: number): number[] {
    const res = [];
    let cur = 1;
    for(let i = 0;i<n;i++){
        res.push(cur);
        if(cur*10<=n){
            cur = cur * 10;
        }
        else {
            while (cur % 10 === 9 || cur + 1 > n)
                cur = Math.floor(cur/10);
            cur ++;
        }
    }
    return res;
};

# leetcode