给定一个n找到从1到n的全排列:
首先给定一个[]
第一层:可以放1 , 2 ,3 ,4 ... n
加入进入1,第二层可以放 2 ,3 ,4,5...n
。。。到达第n层即返回一个结果
1.定义一个used的数组:表示哪些数已经被使用了
boolean[] used = new boolean[n+1];
2.定义一个栈表示当前所在的层次
Deque<Integer> deque = new ArrayDeque<>();
3.深度优先遍历:
dfs(int cur, int n, boolean[] used, Deque<Integer> deque)
if(cur==n){
达到第n层返回一个结果: deque.toArray().sout();
}
for(int i=1;i<=n;i++){
if(used[i]){continue;} // 当前数已经使用跳过
deque.addLast(i);// 放入栈中
used[i] = true;// 设置为已使用
dfs(cur+1,n,used,deque);// 深度优先递归
deque.removeLast(i)// 回溯取出
used[i] = false;// 回溯设置
}
时间复杂:O(n*n!)
空间复杂:O(n*n!)