元宝    LeetCode 386. 字典序排数 Java实现

核心思路

字典序排数 = 对一棵「十叉字典树」做前序遍历:根是 1~9,每个节点
“cur” 的孩子是
“cur*10 + d”(d = 0~9)。先访问自己,再按 d 从小到大访问孩子,正好就是字典序。

1 → 10 → 100 → 101 → … → 109 → 11 → 110 → … → 19 → 2 → 20 → …

写法一:DFS 递归(最直观,推荐先掌握)

class Solution {
public List lexicalOrder(int n) {
List res = new ArrayList<>(n);
for (int i = 1; i <= 9; i++) dfs(i, n, res);
return res;
}

private void dfs(int cur, int n, List<Integer> res) { if (cur > n) return; res.add(cur); for (int d = 0; d <= 9; d++) { if (cur * 10 + d > n) break; // 后面的更大,直接剪掉 dfs(cur * 10 + d, n, res); } }

}

(改成
“Deque” 显式栈可去掉递归,n=5e4 时递归深度最多 5 层,完全不会栈溢出,递归版可以直接用。)

写法二:迭代求「下一个字典序数」(O(1) 额外空间,最优)

在上一个答案已验证过的逻辑上,模拟字典树的游标移动:

class Solution {
public List lexicalOrder(int n) {
List res = new ArrayList<>(n);
int cur = 1;
for (int i = 0; i < n; i++) {
res.add(cur);
if (cur * 10 <= n) {
cur *= 10; // 有孩子 → 往下走一层
} else {
// 没有孩子:回退到还能 +1 的祖先,然后 +1
while (cur % 10 == 9 || cur + 1 > n) cur /= 10;
cur++;
}
}
return res;
}
}

游标移动规则(这就是字典树的"下一个节点"):

情况 动作 例子(n=192)

“cur*10 <= n” 深入长子 1 → 10 → 100
末位是 9 或
“cur+1 > n” 先回退(
“cur /= 10”) 109 → 11(109 末位 9,回退到 10,再…实际为 11)
其余 兄弟 +1 100 → 101

注意
“while” 里两个条件缺一不可:
“cur % 10 == 9” 处理"没有下一个兄弟",
“cur + 1 > n” 处理"兄弟越界"(如 n=192 时 19 → 2,19+1=20 合法但 192 后的边界情况)。
复杂度

DFS 迭代
时间 O(n) O(n)
空间 O(log n) 递归栈 O(1)(不含输出)

已用 n = 1, 2, 9, 10, 13, 100, 192 验证:两种写法输出完全一致,长度均为 n。

  • n=13 →
    “[1,10,11,12,13,2,3,4,5,6,7,8,9]”
  • n=100 →
    “[1,10,100,11,12,…,19,2,20,21,…]”

面试建议:先说 DFS(好理解),再优化到迭代版。两个都写出来的话,第二个是加分项。

相关新闻

04 · AWS Lambda Running Example: ShopFast Black Friday Canary, Warm Pools and Throttling

04 · AWS Lambda Running Example: ShopFast Black Friday Canary, Warm Pools and Throttling

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 2:19:26 阅读更多 →
谷歌/google shopping 协议采集分析

谷歌/google shopping 协议采集分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 有相关问题请第一时间点击头像看简介或…

2026/10/20 2:19:26 阅读更多 →
Cherry Studio接入牧马人本地模型:离线部署与调优实战指南

Cherry Studio接入牧马人本地模型:离线部署与调优实战指南

聊聊最近在折腾的一件事&#xff1a;用 Cherry Studio 接牧马人&#xff08;Herdsman&#xff09;本地模型&#xff0c;把日常对话、写作、代码辅助这些场景挪到完全离线的环境里跑。折腾完最大的感受是&#xff0c;本地离线推理已经不是“能不能用”的问题&#xff0c;而是“怎…

2026/10/20 2:19:26 阅读更多 →

最新新闻

本地推理实战:用llama.cpp与ollama部署LFM2.5-1.2B小模型

本地推理实战:用llama.cpp与ollama部署LFM2.5-1.2B小模型

1. 上手前的心里话&#xff1a;为什么大家都盯着小模型本地推理最近圈子里聊本地大模型&#xff0c;基本绕不开两个东西&#xff1a;llama.cpp 和 ollama。而我这段时间一直在折腾的主角&#xff0c;是 LFM2.5-1.2B 这个模型。别看它只有 1.2B 参数&#xff0c;实测下来每秒能跑…

2026/10/20 3:51:14 阅读更多 →
CPU推理LFM2.5-1.2B:llama.cpp与ollama的15token/s实战

CPU推理LFM2.5-1.2B:llama.cpp与ollama的15token/s实战

). To avoid truncated thinking or repeated loops, set appropriate stop sequences; generate_enough tokens because thinking consumes budget; temperature lower (0.6-0.7); maybe set--no-cnv? Simpler: stop attags if present; handle "过度思考" issue b…

2026/10/20 3:51:14 阅读更多 →
PyTorch 2.1神经网络构建核心:计算图、编译与内存控制

PyTorch 2.1神经网络构建核心:计算图、编译与内存控制

1. 这不是“Hello World”式教学&#xff1a;为什么从PyTorch 2.1开始构建神经网络&#xff0c;必须绕开90%初学者踩过的坑你点进来的这个标题——“【PyTorch】2.1 使用Pytorch构建一个神经网络”——看起来平平无奇&#xff0c;甚至有点过时。毕竟PyTorch都出到2.3了&#xf…

2026/10/20 3:51:14 阅读更多 →
LiteLLM实战:统一大模型网关的部署与路由策略

LiteLLM实战:统一大模型网关的部署与路由策略

1. 项目概述&#xff1a;LiteLLM 到底是什么&#xff0c;凭什么值得关注干了这些年大模型应用开发&#xff0c;我最大的痛感就是“供应商锁定”和“接口碎片化”。今天调这家模型用一套参数&#xff0c;明天换那家模型又是另一套鉴权和超时策略&#xff0c;光适配层代码就写到手…

2026/10/20 3:51:14 阅读更多 →
OpenClaw Agent日均成本从50元到0.48元:AI工具调用优化实战

OpenClaw Agent日均成本从50元到0.48元:AI工具调用优化实战

1. 一天50块是怎么烧掉的&#xff1a;一次天气查询的完整计费分解先说个真实的场景。某位朋友在群里截图问我&#xff1a;他给OpenClaw配好了工具链&#xff0c;让它每天早上9点自动查一次当天的天气&#xff0c;顺便提醒要不要带伞。结果月底一看账单&#xff0c;光这一条自动…

2026/10/20 3:51:14 阅读更多 →
技能管理实战:识别、组合与迁移,打造个人核心竞争力

技能管理实战:识别、组合与迁移,打造个人核心竞争力

有一次帮一位朋友梳理简历&#xff0c;他接到一个面试问题——“你最擅长的三项技能是什么”。他愣了半天&#xff0c;最后写的是"Excel、PPT、沟通"。写完连他自己都不信&#xff0c;觉得这跟没说一样。那一刻我突然意识到一件事&#xff1a;我们几乎每天都在提&quo…

2026/10/20 3:50:14 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →