Given a collection of integers that might contain duplicates, nums, return all possible subsets.
Note: The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,2]
, a solution is:
[ [2], [1], [1,2,2], [2,2], [1,2], [] ]
Seen this question in a real interview before?
有重复数组的子集集合,要判断一下当前元素是否是重复的,重复则跳过
public class Solution {
public List<List<Integer>> subsetsWithDup(int[] nums) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
List<Integer>item = new ArrayList<Integer>();
if(nums.length==0)return res;
Arrays.sort(nums);
for(int i=1;i<=nums.length;i++){
dfs(0,i,item,res,nums);
}
res.add(new ArrayList<Integer>());
return res;
}
public void dfs(int s,int len, List<Integer>item,List<List<Integer>> res,int[] nums){
if(item.size()==len){
res.add(new ArrayList<Integer>(item));
return;
}
for(int i=s;i<nums.length;i++){
item.add(nums[i]);
dfs(i+1,len,item,res,nums);
item.remove(item.size()-1);
while(i<nums.length-1&&nums[i]==nums[i+1]){
i++;
}
}
}
}