Combination Sum

https://leetcode.com/problems/combination-sum/

An example of backtracking.

results = []
 
def backtrack(remain, comb, start):
    nonlocal results
    if remain == 0:
        # accept the comb
        results.append(list(comb))
        return
    elif remain < 0:
        # reject the comb
        return
 
    # continue exploration
    for i in range(start, len(candidates)):
        comb.append(candidates[i])
        backtrack(remain - candidates[i], comb, i)
        comb.pop()
 
backtrack(target, [], 0)
 
return results