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.

Example:

Input: [1,2,2]
Output:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]

题解:

第一次使用visit数组记录访问情况超时。

更进思路后,先对nums排序,然后进行dfs,每个点作为起始点进行遍历,set暴力去重。

class Solution {
public:
void dfs(vector<int>& nums, set<vector<int>>& res, vector<int>& idx, int n, int k) {
sort(idx.begin(), idx.end());
res.insert(idx);
for (int i = k; i < n; i++) {
idx.push_back(nums[i]);
dfs(nums, res, idx, n, i + 1);
idx.pop_back();
}
}
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
int n = nums.size();
set<vector<int>> res;
vector<int> idx;
sort(nums.begin(), nums.end());
dfs(nums, res, idx, n, 0);
vector<vector<int>> ans(res.begin(), res.end());
return ans;
}
};