Problem: Given a set of integers, find all subsets that sum up to a given target.
Approach:
Code Example:
#include <iostream>
#include <vector>
using namespace std;
void findSubsetsThatSumToTarget(vector<int>& nums, vector<int>& current, int index, int target, vector<vector<int>>& result) {
if (target == 0) {
result.push_back(current);
return;
}
if (index == nums.size() || target < 0) {
return;
}
// Exclude current element
findSubsetsThatSumToTarget(nums, current, index + 1, target, result);
// Include current element
current.push_back(nums[index]);
findSubsetsThatSumToTarget(nums, current, index + 1, target - nums[index], result);
current.pop_back();
}
vector<vector<int>> subsetsThatSumToTarget(vector<int>& nums, int target) {
vector<vector<int>> result;
vector<int> current;
findSubsetsThatSumToTarget(nums, current, 0, target, result);
return result;
}
int main() {
vector<int> nums = {2, 3, 5, 7};
int target = 7;
vector<vector<int>> result = subsetsThatSumToTarget(nums, target);
for (const auto& subset : result) {
for (int num : subset) {
cout << num << " ";
}
cout << endl;
}
return 0;
}