public class 全排列 {
public static void main(String[] args) {
int[] arr= {1,2,3,4,5,6,7,8,9};
int len=arr.length;
//保存对应下标的数字是否被使用过
boolean[] used=new boolean[len];
//保存答案
List<List<Integer>> ans=new ArrayList<List<Integer>>();
//记录当前路径
Deque<Integer> path=new ArrayDeque<Integer>();
dfs(arr,len,0,ans,used, path);
}
public static void dfs(int[] arr,int len,int depth,List<List<Integer>> ans,boolean[] used,Deque<Integer> path) {
//如果深度等于数组长度,那么就代表全部数字都用过了
if(depth==len) {
ans.add(new ArrayList<Integer>(path));
return;
}
for(int i=0;i<len;i++) {
//如果该数字被用过了就跳过
if(used[i]==true) {
continue;
}
path.addLast(arr[i]);
used[i]=true;
//深度遍历下一层
dfs(arr, len, depth+1, ans, used, path);
//回归状态,将使用的数字归为未使用状态,从路径中移除
used[i]=false;
path.removeLast();
}
}
}
全排列算法
最新推荐文章于 2025-07-27 20:28:43 发布