子集2

题目

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的 子集(幂集)。解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

思路

和子集的方法异曲同工,要做的就是怎样去除重复项

class Solution {
public:
    vector<vector<int>> res;
    vector<int> path;
    void subsetsWithDupAux(vector<int>& nums, int start_index)
    {
        for(int i = start_index; i < nums.size(); ++i)
        {
            if(i > start_index && nums[i] == nums[i - 1]) continue;
            path.emplace_back(nums[i]);
            res.emplace_back(path);
            subsetsWithDupAux(nums, i + 1);
            path.pop_back();
        }
    }
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        res.emplace_back(path);
        sort(nums.begin(), nums.end());
        subsetsWithDupAux(nums, 0);
        return res;
    }
};

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top