#include <iostream>
#include <vector>
void allPossibleSubsets(std::vector<int>& nums, int start, std::vector<int>& currentSubset,
std::vector<std::vector<int>>& result) {
result.push_back(currentSubset); // Add the current subset to the result
for (int i = start; i < nums.size(); ++i) {
currentSubset.push_back(nums[i]); // Include nums[i] in the subset
allPossibleSubsets(nums, i + 1, currentSubset, result); // Recurse with the next index
currentSubset.pop_back(); // remove the last element
}
}
std::vector<std::vector<int>> subsets(std::vector<int>& nums) {
std::vector<std::vector<int>> result;
std::vector<int> currentSubset;
allPossibleSubsets(nums, 0, currentSubset, result);
return result;
}
int main() {
std::vector<int> nums = {1, 2, 3}; // Example input
std::vector<std::vector<int>> result = subsets(nums);
std::cout << "All unique subsets:\n";
for (const auto& subset : result) {
std::cout << "[ ";
for (int num : subset) {
std::cout << num << " ";
}
std::cout << "]\n";
}
}
/*
run:
All unique subsets:
[ ]
[ 1 ]
[ 1 2 ]
[ 1 2 3 ]
[ 1 3 ]
[ 2 ]
[ 2 3 ]
[ 3 ]
*/