如何求 1 2 3 的全排列
使用递归,dfs搜索
代码示例
package C47_全排列;
import java.util.*;
public class Demo01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int num[]= {1,2,3};
List<List<Integer>> result =new ArrayList<List<Integer>>();
List<Integer>templist=new ArrayList<Integer>();
boolean []used=new boolean[num.length];
dfs(num,templist,result,used);
System.out.println(result);
}
public static void dfs(int[] num, List<Integer> templist, List<List<Integer>> result,boolean []used) {
//如果 templist 的大小等于 num 的长度,说明已经找到了一个全排列,将其添加到 result 列表中,并返回。
if(templist.size()==num.length) {
result.add(new ArrayList<Integer>(templist));
return;
}
for (int i = 0; i <num.length; i++) {
if(used[i]) {如果该数字已经被使用(used[i] 为 true),则跳过。
continue;
}
templist.add(num[i]);//否则,将该数字添加到 templist 中,,
used[i]=true;//标记为已使用(used[i] 设置为 true)
dfs(num,templist,result,used);//递归调用 dfs 方法。
templist.remove(templist.size()-1);//后退一部。
used[i]=false;//并标记为未使用(used[i] 设置为 false);
}
}
}