思路:采用回溯法
实现:
public class Solution {
List<List<Integer>> res=new ArrayList<>();
public List<List<Integer>> subsetsWithDup(int[] nums) {
if(nums==null) return res;
Arrays.sort(nums);
List<Integer> list=new ArrayList<>();
subsets(nums, list, 0);
return res;
}
private void subsets(int[] nums, List<Integer> list, int start){
if(start>nums.length) return;
res.add(new ArrayList<>(list));
for(int i=start; i<nums.length; i++){
//防止将本身多次添加到集合中,但又不能过滤掉相同的数字
if(i!=start && nums[i]==nums[i-1]) continue;
list.add(nums[i]);
subsets(nums, list, i+1);
list.remove(list.size()-1);
}
}
}