LeetCode90 子集(数组中包含重复元素)
递归+回溯
:关键是如何进行剪枝,和之前的数组的组合和排列类似,在本层数据不能存在重复(第一个数据可以)
package BDyNamicProgramming;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Problem90 {
public List<List<Integer>> subsetsWithDup(int[] nums) {
List<List<Integer>> rs = new ArrayList<>();
List<Integer> path = new ArrayList<>();
Arrays.sort(nums);
dfs(nums,path,rs,0);
return rs;
}
public void dfs(int[] nums,List<Integer> path, List<List<Integer>> rs,int start){
rs.add(new ArrayList<>(path));
for(int i=start;i<nums.length;i++){
if(i>start&&nums[i]==nums[i-1]) continue;
path.add(nums[i]);
dfs(nums,path,rs,i+1);
path.remove((Object)(nums[i]));
}
}
}