题目描述
思路分析
指数型枚举
d
f
s
dfs
dfs
为了不重复,选择在
d
f
s
dfs
dfs过程中枚举每个数选的个数即可。其他的和这道题类似。
代码实现
class Solution {
public:
vector<vector<int>> ans;
vector<int> path;
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
sort(nums.begin(),nums.end());
dfs(0,nums);
return ans;
}
void dfs(int u,vector<int>& nums){
if(u==nums.size()){
ans.push_back(path);
return;
}
int r=u;
while(r<nums.size()&&nums[r]==nums[u]) r++;
int cnt=r-u;
for(int i=0;i<=cnt;i++){
for(int k=0;k<i;k++) path.push_back(nums[u]);
dfs(u+cnt,nums);
for(int k=0;k<i;k++) path.pop_back();
}
}
};