Permutations – Solution & Complexity

Solution Walkthrough

  1. Step 1: Recognize the Pattern

    The key pattern is: Backtracking chooses each remaining value next. Identify the state and invariant before coding.

  2. Step 2: Build the Algorithm

    Advance one state transition at a time. Mark or update state before exploring dependent work.

  3. Step 3: Check Edge Cases

    Test empty or minimal input, skewed shapes, duplicates where allowed, and impossible outcomes.

  4. Step 4: Solution and Complexity

    Time: O(nn!). Space: O(nn!).

    def permute(nums: list[int]) -> list[list[int]]:
        answer = []
        def build(current, remaining):
            if not remaining:
                answer.append(current); return
            for i, value in enumerate(remaining):
                build(current + [value], remaining[:i] + remaining[i+1:])
        build([], nums)
        return answer

FAQ