// Combination Sum class Solution { private: void f(vector> &r, vector &rr, vector &a, int i, int s) { if (i == a.size()) { if (!s) r.push_back(rr); } else { int c = 0; f(r, rr, a, i+1, s); while (a[i] <= s) { s -= a[i]; rr.push_back(a[i]); f(r, rr, a, i+1, s); c++; } rr.erase(rr.end()-c, rr.end()); } } public: vector > combinationSum(vector &a, int s) { vector rr; vector> r; a.erase(unique(a.begin(), a.end()), a.end()); sort(a.begin(), a.end()); f(r, rr, a, 0, s); return r; } };