给定某个数组,输出其元素所有的排列组合
List<List<Integer>> result =new ArrayList<Integer>();
List<Integer> temp = new ArrayList<Integer>();
public void pl(int [] nums){
if(nums==null || nums.length==0) return;
dfs(nums);
}
public void dfs(int [] nums){
if(temp.size()==nums.length){
result.add(new ArrayList<Integer>(temp));
return;
}
for(int i =0 ; i < nums.length; i++){
if(!temp.contains(nums[i])){
temp.add(nums[i]);
dfs(nums);
temp.remove(temp.size()-1);
}
}
}
//排列组合另一种写法
public static void getdfs(int[] nums,int k) {
if(k > nums.length) return;
if(k==nums.length) {
List<Integer> temp_ = new ArrayList<Integer>();
for(int c : nums) temp_.add(c);
res.add(temp_);
return;
}
for(int i=k;i < nums.length;i++) {
swap(nums,i,k);
getdfs(nums,k+1);
swap(nums,i,k);
}
}
public void getres(int[] nums){
getdfs(nums,0);
}
//有重复的排列组合