- 题目描述
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
来源:LeetCode
- 示例
示例:
输入: [1,2,2]
输出:
[[2],
[1],
[1,2,2],
[2,2],
[1,2],
[] ]
- 思路分析
感觉已经做过很多遍这个题了。。。见#78。这道题就注意在排序之后,同一轮里遇到重复的元素跳过就可以了。
- JAVA实现
class Solution {
public List<List<Integer>> subsetsWithDup(int[] nums) {
List<Integer> temp = new ArrayList();
List<List<Integer>> res = new ArrayList();
res.add(temp);
Arrays.sort(nums); //数组排序
tb(temp, res, nums, 0);
return res;
}
public void tb(List<Integer> temp, List<List<Integer>> res, int[] nums, int num) {
if(num >= nums.length) return;
int last = nums[num]-1;
for(int i=num; i<nums.length; i++) {
if(nums[i] != last) {
temp.add(nums[i]);
res.add(new ArrayList(temp));
tb(temp, res, nums, i+1);
last = nums[i];
temp.remove(temp.size()-1);
}
else continue;
}
}
}