//mine
class Solution {
public:
vector<vector<int>> subsetsWithDup(vector<int> &nums) {
sort(nums.begin(), nums.end(), greater<>());
f(nums, 0);
return vector<vector<int>>(set_.begin(), set_.end());
}
void f(vector<int>& nums, int cur) {
if (nums.size() == cur) {
set_.insert(vector<int>());
return;
}
f(nums, cur + 1);
vector<vector<int>> v;
for (auto a : set_) {
a.push_back(nums[cur]);
v.push_back(a);
}
set_.insert(v.begin(), v.end());
}
private:
set<vector<int>> set_;
};
class Solution {
public:
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
sort(nums.begin(), nums.end());
vector<vector<int>> res = {{}};
vector<int> curr;
int size;
for (auto num : nums) {
size = res.size();
for (int i = 0; i < size; i++) {
curr = res[i];
curr.push_back(num);
if (find(res.begin(), res.end(), curr) == res.end())
res.push_back(curr);
}
}
return res;
}
};
// 0ms
class Solution {
public:
void findsubset(vector<int> &nums,int ind,vector<vector<int>> &ans, vector<int> &ds)
{
ans.push_back(ds);
for(int i=ind;i<nums.size();i++)
{
if(i!=ind && nums[i]==nums[i-1]) continue;
ds.push_back(nums[i]);
findsubset(nums,i+1,ans,ds);
ds.pop_back();
}
}
public:
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<vector<int>> ans;
vector<int> ds;
findsubset(nums,0,ans,ds);
return ans;
}
};
'알고리즘 > leetcode' 카테고리의 다른 글
231. Power of Two (0) | 2022.07.24 |
---|---|
120. Triangle (0) | 2022.07.22 |
Two Sum - easy (0) | 2021.08.02 |
Making A Large Island (0) | 2021.08.01 |
Map Sum Pairs (0) | 2021.07.31 |