Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.
Ensure that numbers within the set are sorted in ascending order.
Example 1:
Input: k = 3, n = 7
Output:
[[1,2,4]]
Example 2:
Input: k = 3, n = 9
Output:
[[1,2,6], [1,3,5], [2,3,4]]
I first allocate an array to store [1 ..9]. Actually this is not needed...
#include <vector> #include <iostream> using namespace std; // all possible k numbers that add up to a number n, given that only numbers from 1 to 9. // Input: k = 3, n = 7 // output: [[1, 2, 4]] void combinationSum3(int& k, int& val, int index, int target, vector<int>& path, vector< vector<int> >& res) { if(k < 0) return; if(val == target && k == 0) { res.push_back(path); } for(int i = index; i < 10; ++i) { val += i; k--; path.push_back(i); combinationSum3(k, val, i + 1, target, path, res); val -= i; k++; path.pop_back(); } } vector< vector<int> > combinationSum3(int k, int n) { vector< vector<int> > res; vector<int> path; int sum = 0; combinationSum3(k, sum, 1, n, path, res); return res; } int main(void) { vector< vector<int> > res = combinationSum3(3, 7); for(int i = 0; i < res.size(); ++i) { for(int j = 0; j < res[0].size(); ++j) { cout << res[i][j] << endl; } cout << endl; } }