首页 > 其他 > 详细

全排列

时间:2021-05-12 15:11:42      阅读:21      评论:0      收藏:0      [点我收藏+]

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

 

全排列

原文:https://www.cnblogs.com/wsZzz1997/p/14759230.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!