1. Bitmask Generation + Hash Set Deduplication
Intuition
Sort nums initially so subsets have consistent canonical order. Iterate mask from 0 to 2N - 1, build subset, serialize to string or set to deduplicate.
Algorithm
- Step 1: Sort each generated subset and insert into a Hash Set of lists.
- Step 2: Explore all 2N subsets using standard backtracking.
- Step 3: Convert the unique set of subsets into the final result list.
- Step 4: Return result.
#include <iostream>#include <vector>#include <set>#include <algorithm> class Solution {public: std::vector<std::vector<int>> subsetsWithDup(std::vector<int>& nums) { std::sort(nums.begin(), nums.end()); int n = nums.size(); int total = 1 << n; std::set<std::vector<int>> uniqueSubsets; for (int mask = 0; mask < total; mask++) { std::vector<int> current; for (int j = 0; j < n; j++) { if ((mask >> j) & 1) { current.push_back(nums[j]); } } uniqueSubsets.insert(current); } return std::vector<std::vector<int>>(uniqueSubsets.begin(), uniqueSubsets.end()); }}; int main() { Solution solver; std::vector<int> nums = {1, 2, 2}; std::vector<std::vector<int>> res = solver.subsetsWithDup(nums); std::cout << "Brute Force Subsets for [1, 2, 2]:\n"; for (const auto& s : res) { std::cout << "[ "; for (int x : s) std::cout << x << " "; std::cout << "]\n"; } return 0;}Time & Space Complexity
- Time complexity:
O(N * 2^N)— Generates all 2N subsets and hashes each. - Space complexity:
O(N * 2^N)— Hash Set stores up to 2N subsets.