leetCode.90. 子集 II
题目思路
代码
class Solution {
public:
vector<vector<int>> res;
vector<int> path;
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
// 先排序,让有相同元素的都放到一起
sort(nums.begin(), nums.end());
dfs(nums,0);
return res;
}
void dfs(vector<int>& nums, int u) {
if (u == nums.size()) {
res.push_back(path);
return;
}
int k = u + 1;
// 判断重复元素出现的次数
while (k < nums.size() && nums[u] == nums[k]) ++ k;
// 从nus[u]开始,一直存放到相同元素出现的次数,共计存放 o ~ 当前所在位置所有元素的次数 + 相同元素的次数
for (int i = 0; i <= k - u; ++ i) {
dfs(nums, k); // 先这样,可以表示可以相同元素存0次
path.push_back(nums[u]);
}
// 剪枝
for (int i = 0; i <= k - u; ++ i) {
path.pop_back();
}
}
};
标签:leetCode.90,nums,int,元素,back,II,vector,子集,path
From: https://blog.csdn.net/qq_48290779/article/details/139391670