Files
leetcode-master/problems/0090.子集II.md
youngyangyang04 3ee636ec90 Update
2020-08-21 10:31:54 +08:00

1002 B

题目地址

https://leetcode-cn.com/problems/subsets-ii/

第90题. 子集II

思路

C++代码

class Solution {
private:
    void backtracking(vector<int>& nums, vector<vector<int>>& result, vector<int>& vec, int startIndex,  vector<bool>& used) {
        result.push_back(vec);
        for (int i = startIndex; i < nums.size(); i++) {
            if (i > 0 && nums[i] == nums[i - 1] && used[i-1] == false) { // 果然去重都是一个逻辑啊
                continue;
            }
            vec.push_back(nums[i]);
            used[i] = true;
            backtracking(nums, result, vec, i + 1, used);
            used[i] = false;
            vec.pop_back();
        }
    }

public:
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        vector<bool> used(nums.size(), false);
        vector<vector<int>> result;
        vector<int> vec;
        sort(nums.begin(), nums.end());
        backtracking(nums, result, vec, 0, used);
        return result;
    }
};