Combination Sum

Find combinations that sum to target.

Problem: Find combinations summing to target. Numbers reusable.

function backtrack(candidates, remaining, start, current, result):
    if remaining == 0:
        result.add(copy of current)
        return
    if remaining < 0:
        return
    for i from start to candidates.length - 1:
        current.add(candidates[i])
        backtrack(candidates, remaining - candidates[i], i, current, result)
        current.removeLast()

start = i allows reuse. Sort and skip if current > remaining.