题目
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: [1,2,2] 输出: [ [2], [1], [1,2,2], [2,2], [1,2], [] ]
分析
在取子集的时候不可以有重复的,先给数组排序,然后再递归过程如果有相同数字,数字出现的第一次递归之后,后面相同数字则不再去递归。
代码
class Solution {
public List<List<Integer>> subsetsWithDup(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> list = new ArrayList<>();
List<Integer> tempList = new ArrayList<>();
subsets(list,tempList,nums,0);
tempList.clear();
list.add(tempList);
return list;
}
public static void subsets(List<List<Integer>> list, List<Integer> tempList, int[] nums, int index){
for (int i = index; i < nums.length; i++) {
tempList.add(nums[i]);
list.add(new ArrayList<>(tempList));
subsets(list,tempList,nums,i+1);
for (int j = i+1; j < nums.length; j++)
if(nums[i] == nums[j]) i++;
else break;
tempList.remove(tempList.size()-1);
}
}
}