Problem: Given a set of distinct integers, return all possible subsets.

Approach:

  1. Start with an empty subset.
  2. For each element, you can either include it in the subset or exclude it.
  3. Use a recursive function to explore both possibilities.

Code Example:

#include <iostream>
#include <vector>

using namespace std;

void generateSubsets(vector<int>& nums, vector<int>& current, int index, vector<vector<int>>& result) {
    if (index == nums.size()) {
        result.push_back(current);
        return;
    }
    // Exclude current element
    generateSubsets(nums, current, index + 1, result);
    // Include current element
    current.push_back(nums[index]);
    generateSubsets(nums, current, index + 1, result);
    current.pop_back();
}

vector<vector<int>> subsets(vector<int>& nums) {
    vector<vector<int>> result;
    vector<int> current;
    generateSubsets(nums, current, 0, result);
    return result;
}

int main() {
    vector<int> nums = {1, 2, 3};
    vector<vector<int>> result = subsets(nums);
    for (const auto& subset : result) {
        for (int num : subset) {
            cout << num << " ";
        }
        cout << endl;
    }
    return 0;
}