Combination Sum II

set<vector<int>> res;

void getWays(vector<int> &A, int B, int current, vector<int> &output) {
    if(B == 0) {
        res.insert(output);
        return;
    }
    
    for(int i = current; i < A.size(); i++) 
        if(B - A[i] >= 0) {
            output.push_back(A[i]);
            getWays(A, B - A[i], i + 1, output);
            output.pop_back();
        }
}

vector<vector<int> > Solution::combinationSum(vector<int> &A, int B) {
    sort(A.begin(), A.end());
    res.clear();
    
    int current = 0;
    vector<int> output;
    getWays(A, B, current, output);
    vector<vector<int>> v(res.begin(), res.end());
    return v;
}

Time Complexity: $$

Last updated