Question
Given a collection of integers that might contain duplicates, nums, return all possible subsets.
Note:
Elements in a subset must be in non-descending order.
The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,2], a solution is:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
Code
public List<List<Integer>> subsetsWithDup(int[] nums) {
Arrays.sort(nums);
Set<List<Integer>> sresults = new HashSet<>();
List<List<Integer>> results = new ArrayList<>();
int len = (int) Math.pow(2, nums.length);
boolean[] flags = new boolean[nums.length];
for (int i = 0; i < len; i++) {
for (int j = 0; j < flags.length; j++) {
if (!flags[j]) {
flags[j] = true;
break;
}
flags[j] = false;
}
List<Integer> sub = new ArrayList<>();
for (int j = 0; j < flags.length; j++) {
if (flags[j]) {
sub.add(nums[j]);
}
}
sresults.add(sub);
}
for (List<Integer> sub : sresults) {
results.add(sub);
}
return results;
}
本文介绍了一种处理包含重复元素的整数集合并生成所有可能子集的算法。该算法确保了子集内部元素的非递减顺序及最终解决方案中没有重复的子集。通过示例说明了算法的具体实现。
1157

被折叠的 条评论
为什么被折叠?



