leetcode-386:字典序排数

简介: leetcode-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]

解题

方法一:字典树+前序遍历

class Trie{
public:
    bool isEnd=false;
    vector<Trie*> next=vector<Trie*>(10,nullptr);
};
class Solution {
public:
    Trie* trie=new Trie();
    vector<int> res;
    vector<int> lexicalOrder(int n) {
        for(int i=1;i<=n;i++){
            insert(to_string(i));
        }
        traversal(trie,0);
        return res;
    }
    //字典树前序遍历
    void traversal(Trie* root,int path){
        if(root->isEnd){
            res.push_back(path);
        }
        for(int i=0;i<10;i++){
            if(root->next[i]){
                traversal(root->next[i],path*10+i);
            }
        }
    }
    //字典树插入节点
    void insert(string&& s){
        Trie* node=trie;
        for(char c:s){
            if(node->next[c-'0']==nullptr){
                node->next[c-'0']=new Trie();
            }
            node=node->next[c-'0'];
        }
        node->isEnd=true;
    }
};

方法二:迭代

class Solution {
public:
    vector<int> lexicalOrder(int n) {
        vector<int> res(n);
        int num=1;
        for(int i=0;i<n;i++){
            res[i]=num;
            if(num*10<=n){
                num*=10;
            }else{
                while(num%10==9||num+1>n){
                    num/=10;
                }
                num++;
            }
        }
        return res;
    }
};


相关文章
|
4天前
|
存储 JavaScript 前端开发
JavaScript基础
本节讲解JavaScript基础核心知识:涵盖值类型与引用类型区别、typeof检测类型及局限性、===与==差异及应用场景、内置函数与对象、原型链五规则、属性查找机制、instanceof原理,以及this指向和箭头函数中this的绑定时机。重点突出类型判断、原型继承与this机制,助力深入理解JS面向对象机制。(238字)
|
3天前
|
云安全 人工智能 安全
阿里云2026云上安全健康体检正式开启
新年启程,来为云上环境做一次“深度体检”
1479 6
|
5天前
|
安全 数据可视化 网络安全
安全无小事|阿里云先知众测,为企业筑牢防线
专为企业打造的漏洞信息收集平台
1316 2
|
4天前
|
缓存 算法 关系型数据库
深入浅出分布式 ID 生成方案:从原理到业界主流实现
本文深入探讨分布式ID的生成原理与主流解决方案,解析百度UidGenerator、滴滴TinyID及美团Leaf的核心设计,涵盖Snowflake算法、号段模式与双Buffer优化,助你掌握高并发下全局唯一ID的实现精髓。
329 160
|
4天前
|
人工智能 自然语言处理 API
n8n:流程自动化、智能化利器
流程自动化助你在重复的业务流程中节省时间,可通过自然语言直接创建工作流啦。
379 6
n8n:流程自动化、智能化利器
|
13天前
|
机器学习/深度学习 安全 API
MAI-UI 开源:通用 GUI 智能体基座登顶 SOTA!
MAI-UI是通义实验室推出的全尺寸GUI智能体基座模型,原生集成用户交互、MCP工具调用与端云协同能力。支持跨App操作、模糊语义理解与主动提问澄清,通过大规模在线强化学习实现复杂任务自动化,在出行、办公等高频场景中表现卓越,已登顶ScreenSpot-Pro、MobileWorld等多项SOTA评测。
1501 7
|
6天前
|
人工智能 API 开发工具
Skills比MCP更重要?更省钱的多!Python大佬这观点老金测了一周终于懂了
加我进AI学习群,公众号右下角“联系方式”。文末有老金开源知识库·全免费。本文详解Claude Skills为何比MCP更轻量高效:极简配置、按需加载、省90% token,适合多数场景。MCP仍适用于复杂集成,但日常任务首选Skills。推荐先用SKILL.md解决,再考虑协议。附实测对比与配置建议,助你提升效率,节省精力。关注老金,一起玩转AI工具。
|
3天前
|
Linux 数据库
Linux 环境 Polardb-X 数据库 单机版 rpm 包 安装教程
本文介绍在CentOS 7.9环境下安装PolarDB-X单机版数据库的完整流程,涵盖系统环境准备、本地Yum源配置、RPM包安装、用户与目录初始化、依赖库解决、数据库启动及客户端连接等步骤,助您快速部署运行PolarDB-X。
234 1
Linux 环境 Polardb-X 数据库 单机版 rpm 包 安装教程
|
14天前
|
人工智能 Rust 运维
这个神器让你白嫖ClaudeOpus 4.5,Gemini 3!还能接Claude Code等任意平台
加我进AI讨论学习群,公众号右下角“联系方式”文末有老金的 开源知识库地址·全免费
1377 17
|
4天前
|
自然语言处理 监控 测试技术
互联网大厂“黑话”完全破译指南
互联网大厂黑话太多听不懂?本文整理了一份“保姆级”职场黑话词典,涵盖PRD、A/B测试、WLB、埋点、灰度发布等高频术语,用大白话+生活化类比,帮你快速听懂同事在聊什么。非技术岗也能轻松理解,建议收藏防踩坑。
293 161