【LeetCode-386】字典序排数

问题

给定一个整数 n, 返回从 1 到 n 的字典顺序。

请尽可能的优化算法的时间复杂度和空间复杂度。 输入的数据 n 小于等于 5,000,000。

示例

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

解答

class Solution {
public:
    vector<int> lexicalOrder(int n) {
        for (int i = 1; i < 10; i++)
            dfs(n, i);
        return res;
    }
private:
    vector<int> res;
    void dfs(int n, int num) {
        if (num <= n) res.push_back(num);
        for (int i = 0; i < 10; i++) {
            int cur = num * 10 + i;
            if (cur > n) return;
            dfs(n, cur);
        }
    }
};

重点思路

类似【剑指Offer-17】打印从1到最大的n位数

posted @ 2021-03-29 16:32  tmpUser  阅读(45)  评论(0)    收藏  举报