当前位置: 首页 > backend >正文

386. 字典序排数

解题思路

在这里插入图片描述

题目要求按字典序返回范围 [1, n] 的所有整数,且要求时间复杂度为 O(n) 和 O(1) 额外空间。字典序即数字的字符串表示按字典顺序排列,例如 1, 10, 11, 12, 13, 2, 3, …。

我们可以使用迭代的方法模拟深度优先搜索(DFS)遍历字典序树:

  1. 初始化:从数字 1 开始。
  2. 生成数字:每次循环将当前数字加入结果列表。
  3. 选择下一个数字
    • 如果当前数字的 10 倍不超过 n,则下一个数字是当前数字的 10 倍(进入下一层)。
    • 否则,回溯到上一层(即当前数字除以 10),直到找到一个数字,其末尾不是 9 且加 1 后不超过 n。然后将当前数字加 1(进入同一层的下一个分支)。
    • 如果回溯到 0,说明所有数字已生成完毕,提前结束循环。

代码实现

class Solution:def lexicalOrder(self, n: int) -> List[int]:res = []cur = 1for _ in range(n):res.append(cur)if cur * 10 <= n:cur *= 10else:# 回溯直到找到可以加1的数字或回溯到0while cur % 10 == 9 or cur + 1 > n:cur //= 10if cur == 0:breakif cur == 0:breakcur += 1return res

算法分析

  • 时间复杂度:O(n),每个数字恰好生成一次。
  • 空间复杂度:O(1),除输出列表外,仅使用常数空间。

示例说明

  • 输入 n=13
    1. 初始 cur=1,加入结果 [1]1*10=10<=13cur=10
    2. cur=10,加入结果 [1,10]10*10=100>13 → 回溯:10%10=010+1=11<=13cur=11
    3. cur=11,加入结果 [1,10,11]11*10=110>13 → 回溯:11%10=111+1=12<=13cur=12
    4. cur=12,加入结果 [1,10,11,12]12*10=120>13 → 回溯:12%10=212+1=13<=13cur=13
    5. cur=13,加入结果 [1,10,11,12,13]13*10=130>13 → 回溯:13%10=313+1>13,回溯到 1cur=1+1=2
    6. 后续依次加入 2,3,...,9,最终结果为 [1,10,11,12,13,2,3,4,5,6,7,8,9]

该算法高效地按字典序生成了所有数字,满足时间和空间复杂度要求。

http://www.xdnf.cn/news/12853.html

相关文章:

  • 达梦数据库字段类型 varchar 转 text
  • Python初体验学习笔记
  • 电路图识图基础知识-电动机正反转控制电路详解(二十)
  • 省略号和可变参数模板
  • OPENCV图形计算面积、弧长API讲解(2)
  • 做题笔记(ctfshow)
  • LeetCode - 145. 二叉树的后序遍历
  • JavaScript 内置对象全解析
  • QRadioButton(续)+ CheckBox + QLabel(2)
  • 【Go语言基础【20】】Go的包与工程
  • c#,Powershell,mmsys.cpl,使用Win32 API展示音频设备属性对话框
  • JavaWeb预习(jdbc)
  • 拼多多官方内部版 7.58.0 | 极限精简,只有2.5M
  • 【笔记】Poetry虚拟环境创建示例
  • Prompt Tuning(提示调优)到底训练优化的什么部位
  • DiscuzX3.5发帖json api
  • maven 1.0.0idea的使用说明
  • Vue3学习(watchEffect,标签的ref属性,计数器,defineExpose)
  • SpringCloud学习笔记-4
  • 实验二:数码管动态显示实验
  • 建造者模式深度解析与实战应用
  • WEB3技术重要吗,还是可有可无?
  • STM32入门学习之系统时钟配置
  • K8S认证|CKS题库+答案| 7. Dockerfile 检测
  • 五、jmeter脚本参数化
  • PHP中如何定义常量以及常量和变量的主要区别
  • Spark流水线+Gravitino+Marquez数据血缘采集
  • java综合项目开发一课一得
  • 使用 Melos 高效管理 Flutter/Dart Monorepo 项目
  • 用 Melos 解决 Flutter Monorepo 的依赖冲突:一个真实案例