题目描述
给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。
题解
class Solution {
List<List<Integer>> res = new ArrayList<>();
List<Integer> tmp = new ArrayList<>();
public List<List<Integer>> subsetsWithDup(int[] nums) {
boolean[] used = new boolean[nums.length];
Arrays.sort(nums);
backtracking(nums, 0, used);
return res;
}
public void backtracking(int[] nums, int start, boolean[] used) {
if(start == nums.length) {
res.add(new ArrayList(tmp));
return;
}
backtracking(nums, start + 1, used);
if(start >= 1 && nums[start] == nums[start - 1] && !used[start - 1]) {
return;
}
tmp.add(nums[start]);
used[start] = true;
backtracking(nums, start + 1, used);
tmp.remove(tmp.size() - 1);
used[start] = false;
}
}