题目:
分析:
这道题我们完全可以像做子集|的时候一样去做,唯一的变数在于有重复的数字,并且测试用例是无序的,所以我们只需要再这里做一点修改即可
代码:
class Solution {
//用set来存储结果,排除重复结果
private Set<List<Integer>> res=new HashSet<>();
public List<List<Integer>> subsetsWithDup(int[] nums) {
int k=nums.length;
//有序
Arrays.sort(nums);
for(int i=0;i<=k;i++){
helToCombin(0,nums,i,new ArrayList<Integer>());
}
return new ArrayList(res);
}
protected void helToCombin(int now,int[] nums,int k,List<Integer> list){
if(list.size()==k) {
res.add(new ArrayList(list));
}
for(int i=now;i<nums.length;i++){
list.add(nums[i]);
helToCombin(i+1,nums,k,list);
list.remove((Integer) nums[i]);
}
}
}