Here is the implementation:
function permute(nums):
result = []
used = array of n false values
backtrack([])
return result
function backtrack(current):
if current.length == nums.length:
result.append(copy of current)
return
for i from 0 to nums.length - 1:
if used[i]:
continue
used[i] = true
current.append(nums[i])
backtrack(current)
current.pop()
used[i] = false
time, space for recursion and used array.