본문 바로가기
알고리즘/leetcode

Subsets II - medium

by 유이얼 2021. 8. 4.

https://leetcode.com/explore/challenge/card/august-leetcoding-challenge-2021/613/week-1-august-1st-august-7th/3837/

//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