• 386. 字典序排 (模拟 dfs)


    难度中等

     

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


    class Solution {
    public:
        vector<int> res;
        void dfs(int cur, int n) {
            if (cur>n) return;
            res.emplace_back(cur);
            for(int i =0;i < 10;i++) {
                dfs(cur*10+i,n);
            }
        }
        vector<int> lexicalOrder(int n) {
            for(int i = 1; i <= 9;i++) {
                dfs(i,n);
            }
            return res;
        }
    };
    class Solution {
    public:
    
        vector<int> lexicalOrder(int n) {
            vector<int> path;
            int cnt = 0;
            int prefix = 1;
            while(cnt<n) {
                path.emplace_back(prefix);
                if (prefix*10 <= n) {
                    prefix *= 10;
                } else {
                    // 回溯到顶层
                    // 到199 的时候改回溯到2了, 或者正好等于n=34, prefix ==34,也该停止了,返回4,继续遍历
                    while(prefix %10==9 || prefix == n) {
                        prefix /=10;
                    }
                    prefix++;
                }
                cnt++;
            }
            return path;
        }
    };
  • 相关阅读:
    筛选法求素数
    C/C++经典面试题目
    操作系统笔试面试基本内容
    Win32/MFC的基本概念
    STL采用的标准模板库
    数据结构基本概念
    SQL基础语句
    C/C++基础概念
    计算机网络基础概念
    流水作业 批作业调度
  • 原文地址:https://www.cnblogs.com/zle1992/p/16364718.html
Copyright © 2020-2023  润新知