【回溯-数字全排列&&dfs】leet 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]
提示:
1 <= n <= 5 * 10
4
如果数字 【1-9】构成9颗树,每棵树的根分别是1-9,每棵树的每一层节点分别由父节点的值后面加上【0-9】构成,则题目要求打印9颗树,按照先序遍历的节点值。
public List<Integer> lexicalOrder(int n) { List<Integer> ans = new ArrayList<>(); for(int d=1;d<=9;d++){ dfs(d,n,ans); } return ans; } public void dfs(int v,int n,List<Integer> list) { if(v>n){ return; } list.add(v); //先序遍历 for(int d=0;d<10;d++){ dfs(v*10+d,n,list); } }
算法笔试题解-回溯系列 文章被收录于专栏
算法笔试题解-回溯系列