全排列

给定一个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!)

 

posted @ 2021-05-12 12:07  wsZzz1997  阅读(71)  评论(0编辑  收藏  举报