题目链接
字典序排数
题目描述
注意点
- 1 <= n <= 5 * 10^4
解答思路
- 参照题解使用dfs完成本题,需要注意的是结果不包含0,所以先遍历第一层(1~9),再根据每个节点继续深搜,将访问到的节点按顺序添加到结果中即可
代码
class Solution {
public List<Integer> lexicalOrder(int n) {
List<Integer> list = new ArrayList<>(n);
for (int i = 1; i < 10; i++) {
if (i <= n) {
list.add(i);
dfs(list, i, n);
}
}
return list;
}
public void dfs(List<Integer> list, int pre, int n) {
pre *= 10;
if (pre > n) {
return;
}
for (int i = 0; i < 10; i++) {
if (pre + i <= n) {
list.add(pre + i);
dfs(list, pre + i, n);
}
}
}
}
关键点
- 深度优先遍历的思想
- 注意值大于n时要进行剪枝