← Backtracking

Micro-Drill #189 — Combination sum (reuse allowed)

Backtracking Target: 15s

Reuse allowed: recurse with start=i (not i+1). Sort + break when candidate > remaining for pruning.

def combinationSum(candidates, target):
    res = []
    def backtrack(start, path, remaining):
        if remaining == 0:
            res.append(path[:])
            return
        for i in range(start, len(candidates)):
            if candidates[i] > remaining: break
            path.append(candidates[i])
            backtrack(i, path, remaining - candidates[i])  # i, not i+1
            path.pop()
    candidates.sort()
    backtrack(0, [], target)
    return res

Type it from memory. Go.

Practice Problems

Related Coding Drills

← Micro #188 Micro #190 →