90. 子集 II
还是树的思想,
同一层的不能重复,其实也就是看一下每一层的开头就行了i>start就很巧妙的解决了这一点
class Solution {
public:
vector<int> nums;
int n;
vector<vector<int>> result;
//每一层的任务就是看看能不能往下一层放东西
void dfs(int depth,int start,vector<int> cur) {
if (depth == n) {
//最后一层
return;
}
for (int i = start; i < n; i++) {
if (i > start && nums[i] == nums[i - 1]) {
continue;
}
//符合要求
cur.push_back(nums[i]);
result.push_back(cur);
dfs(depth + 1, i + 1, cur);
cur.pop_back();
}
}
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
sort(nums.begin(), nums.end());
this->nums = nums;
this->n=nums.size();
vector<int> cur;
result.push_back(cur);
dfs(0, 0, cur);
return result;
}
};