Permutations

Generate all orderings of elements.

Problem: Return all permutations of distinct integers.

Approach: At each position, try each unused element.

function backtrack(nums, current, used, result):
    if current.length == nums.length:
        result.add(copy of current)
        return
    for i from 0 to nums.length - 1:
        if used[i]: continue
        used[i] = true
        current.add(nums[i])
        backtrack(nums, current, used, result)
        current.removeLast()
        used[i] = false

Time: O(n!n)O(n! \cdot n). Space: O(n)O(n).