CodeCollection2018
8/14/2019 - 11:50 AM

排列组合系列题

给定某个数组,输出其元素所有的排列组合

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);
}
//有重复的排列组合