题意:
将一个可能含有重复数的数组的所有子集全部返回。
分析:
深搜即可,但是不能重复,我们对于重复的不进入递归即可。但是为了判断重复,需要先排序。
public class Solution {
public List<List<Integer>> subsetsWithDup(int[] nums) {
List<List<Integer>> list = new ArrayList<>();
Arrays.sort(nums);
helper(nums, 0, new ArrayList<Integer>(), list);
return list;
}
public void helper(int[] nums, int start, List<Integer> l, List<List<Integer>> list){
if(start > nums.length){
return;
}
list.add(new ArrayList<Integer>(l));
for(int i = start; i < nums.length; i++){
if(i>start && nums[i]==nums[i-1])
continue;
l.add(nums[i]);
helper(nums, i+1, l, list);
l.remove(l.size()-1);
}
}
}