LeetCode/386. 字典序排数

386. 字典序排数

给定一个整数 n, 返回从 1n 的字典顺序。

例如,

给定 n =13,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9]

请尽可能的优化算法的时间复杂度和空间复杂度。 输入的数据 n 小于等于 5,000,000

来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解:

本题其实就是一颗十叉树,用到的就是深度优先搜索遍历

具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
List<Integer> result = new LinkedList<>();

public List<Integer> lexicalOrder(int n) {
for (int i = 1; i < 10; i++) {
dfs(n, i);
}

return result;
}

private void dfs(int n, int i) {
if (i > n) return;
result.add(i);
for (int j = 0; j < 10; j++) {
//提前进行剪枝,就不要递归,节省时间
if (i * 10 + j > n) return;
dfs(n, i * 10 + j);
}
}
}

Comments