We build permutations by choosing each unused element at every position. We use a used boolean array to track which elements have already been placed.
- If the current permutation length equals
n, save it. - Iterate through all elements in
nums. - Skip elements already in the current permutation (tracked by
usedarray). - Add the element, mark as used, recurse.
- Backtrack: remove the element and unmark.
- Time Complexity: O(N! * N).
- Space Complexity: O(N).
def permute(nums):
result = []
def backtrack(current):
if len(current) == len(nums):
result.append(current[:])
return
for num in nums:
if num not in current:
current.append(num)
backtrack(current)
current.pop()
backtrack([])
return result