给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: [1,2,2] 输出: [ [2], [1], [1,2,2], [2,2], [1,2], [] ]
package LeetCode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class SubsetsWithDup {
public static List<List<Integer>> res=null;
public List<List<Integer>> subsetsWithDup(int[] nums) {
res=new ArrayList<>();
List<Integer> r=new ArrayList<>();
res.add(new ArrayList<Integer>(r));
if(nums.length<0){
return res;
}
Arrays.sort(nums);
dfs(0,nums,r);
return res;
}
public void dfs(int index, int[] nums, List<Integer> re) {
for (int i = index; i <nums.length ; i++) {
Integer a=nums[i];
re.add(nums[i]);
if(res.contains(re)){
re.remove(a);
continue;
}
res.add(new ArrayList<Integer>(re));
dfs(i+1,nums,re);
re.remove(a);
}
}
public static void main(String[] args){
SubsetsWithDup sub=new SubsetsWithDup();
int[] nums={4,4,4,1,4
};
System.out.println(sub.subsetsWithDup(nums).toString());
}
}