【DFS+回溯】78. 子集 90. 子集 II

78. 子集

class Solution {
public:
    void dfs(vector<int>& nums, vector<int> &cur, int index){
        if(index > num_len)
            return;
        result.push_back(cur);
        for(int i=index;i<num_len;++i){
            cur.push_back(nums[i]);
            dfs(nums, cur, i+1);
            cur.pop_back();
        }
    }

    vector<vector<int>> subsets(vector<int>& nums) {
        num_len = nums.size();
        vector<int> cur_num;
        dfs(nums, cur_num, 0);
        return result;
    }
private:
    int num_len;
    vector<vector<int>> result;
};

90. 子集 II(含有相同元素求子集)

class Solution {
public:
    void dfs(vector<int>& nums, vector<int> &cur, int index){
        if(index > num_len)
            return;
        result.push_back(cur);
        for(int i=index;i<num_len;++i){
            if(i == index || nums[i] != nums[i-1]){
                cur.push_back(nums[i]);
                dfs(nums, cur, i+1);
                cur.pop_back();
            }
        }
    }

    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        num_len = nums.size();
        vector<int> cur_num;
        dfs(nums, cur_num, 0);
        return result;
    }
private:
    int num_len;
    vector<vector<int>> result;
};
posted @ 2022-03-01 16:45  fwx  阅读(25)  评论(0)    收藏  举报