#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
void helper(const vector<int>& curr_list, int target,
const vector<int>& candidates, int start_index,
vector<vector<int>>* res) {
if (curr_list.size() == 3) {
if (target == 0) {
res->push_back(curr_list);
}
return;
}
for (int i = start_index; i < candidates.size(); i++) {
int diff = target - candidates[i];
auto new_vec = curr_list;
new_vec.push_back(candidates[i]);
helper(new_vec, diff, candidates, i, res);
}
}
vector<vector<int>> combinationSum(vector<int>& candidates) {
vector<vector<int>> res;
helper(vector<int>(), 0, candidates, 0, &res);
return res;
}
};
int main() {
// your code goes here
Solution s;
vector<int> a {-5, 1, 10, 2, 3};
vector<vector<int>> res= s.combinationSum(a);
for (auto i: res)
{
for (auto j : i)
cout << j <<endl;
cout << "----" <<endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgU29sdXRpb24gewogcHVibGljOgogIHZvaWQgaGVscGVyKGNvbnN0IHZlY3RvcjxpbnQ+JiBjdXJyX2xpc3QsIGludCB0YXJnZXQsCiAgICAgICAgICAgICAgY29uc3QgdmVjdG9yPGludD4mIGNhbmRpZGF0ZXMsIGludCBzdGFydF9pbmRleCwKICAgICAgICAgICAgICB2ZWN0b3I8dmVjdG9yPGludD4+KiByZXMpIHsKICAgIGlmIChjdXJyX2xpc3Quc2l6ZSgpID09IDMpIHsKICAgICAgaWYgKHRhcmdldCA9PSAwKSB7CiAgICAgICAgcmVzLT5wdXNoX2JhY2soY3Vycl9saXN0KTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CgogICAgZm9yIChpbnQgaSA9IHN0YXJ0X2luZGV4OyBpIDwgY2FuZGlkYXRlcy5zaXplKCk7IGkrKykgewogICAgICBpbnQgZGlmZiA9IHRhcmdldCAtIGNhbmRpZGF0ZXNbaV07CiAgICAgIGF1dG8gbmV3X3ZlYyA9IGN1cnJfbGlzdDsKICAgICAgbmV3X3ZlYy5wdXNoX2JhY2soY2FuZGlkYXRlc1tpXSk7CiAgICAgIGhlbHBlcihuZXdfdmVjLCBkaWZmLCBjYW5kaWRhdGVzLCBpLCByZXMpOwogICAgfQogIH0KCiAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBjb21iaW5hdGlvblN1bSh2ZWN0b3I8aW50PiYgY2FuZGlkYXRlcykgewogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiByZXM7CiAgICBoZWxwZXIodmVjdG9yPGludD4oKSwgMCwgY2FuZGlkYXRlcywgMCwgJnJlcyk7CiAgICByZXR1cm4gcmVzOwogIH0KfTsKCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJU29sdXRpb24gczsKCXZlY3RvcjxpbnQ+IGEgey01LCAxLCAxMCwgMiwgM307Cgl2ZWN0b3I8dmVjdG9yPGludD4+IHJlcz0gcy5jb21iaW5hdGlvblN1bShhKTsKCWZvciAoYXV0byBpOiByZXMpIAoJewoJIGZvciAoYXV0byBqIDogaSkKCSAgIGNvdXQgPDwgaiA8PGVuZGw7CgkgIGNvdXQgPDwgIi0tLS0iIDw8ZW5kbDsKCX0KCXJldHVybiAwOwp9