Simplest recursive Java Solution


#1
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
public ArrayList<ArrayList<Integer>> combinationSum(ArrayList<Integer> A, int B) {
    ArrayList<Integer> a = new ArrayList<>();
    Collections.sort(A);
    generate(A, B, a, 0, 0);
    return res;
}

void generate(ArrayList<Integer> a , int b , ArrayList<Integer> temp, int index, int cSum){
    if(cSum > b)
        return;
    for(int i = index; i<a.size(); i++){
        temp.add(a.get(i));
        if((cSum + a.get(i)) == b && !res.contains(temp))
            res.add(new ArrayList<Integer>(temp));
        generate(a, b, temp, i, cSum+a.get(i));
        temp.remove(temp.size()-1);
    }
}