Given a collection of integers that might contain duplicates, nums, return all possible subsets (the power set).
Note: 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], [] ]
class Solution {
public:
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
std::vector<std::vector<int> > result;
std::vector<int> item;
std::set<std::vector<int> > res_set;
std::sort(nums.begin(), nums.end());
result.push_back(item);
generate(0, nums, result, item, res_set);
return result;
}
private:
void generate(int i, std::vector<int> &nums, std::vector<std::vector<int> > &result, std::vector<int> &item, std::set<std::vector<int> > &res_set)
{
if(i>=nums.size())
{
return;
}
item.push_back(nums[i]);
if(res_set.find(item)==res_set.end())
{
result.push_back(item);
res_set.insert(item);
}
generate(i+1, nums, result, item, res_set);
item.pop_back();
generate(i+1, nums, result, item, res_set);
}
};
本文介绍了一种解决含重复元素数组的所有可能子集(幂集)问题的方法。通过使用C++实现,确保了结果中不含重复的子集。文章详细展示了如何利用递归和集合来过滤重复项,并给出了具体的代码实现。
1155

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



