Combinations

Choose k elements from n.

Problem: Return all combinations of kk numbers from 11 to nn.

function backtrack(n, k, start, current, result):
    if current.length == k:
        result.add(copy of current)
        return
    for i from start to n:
        current.add(i)
        backtrack(n, k, i + 1, current, result)
        current.removeLast()

Pruning: Skip if remaining elements << needed: if n - i + 1 < k - current.length: return.

Time: O((nk)k)O(\binom{n}{k} \cdot k). Space: O(k)O(k).