重点在于去重,排序之后和前一个比即可,就是当前层不能选同样的数字
class Solution {
public:
void dfs(vector<int>& nums, int index){
//不用递归边界,通过for循环控制
res.push_back(tmp);
for(int i = index; i < nums.size(); ++i){
if(i > index && nums[i] == nums[i-1]) continue;
tmp.push_back(nums[i]);
dfs(nums,i+1);
tmp.pop_back();
}
}
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
//不能包含重复子集,只要在当前层不要选相同的数字即可
//注意是当前层,要和前一个比较,在下一层还是可以选相同的数字的
sort(nums.begin(),nums.end());
dfs(nums,0);
return res;
}
private:
vector<int> tmp;
vector<vector<int>> res;
};