Permutations
Given an array nums of unique integers, return all the possible permutations. You may return the answer in any order.
Example 1:
Input: nums = [1,2,3]
Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
Example 2:
Input: nums = [7]
Output: [[7]]
Constraints:
1 <= nums.length <= 6
-10 <= nums[i] <= 10
Solutions
To elegantly solve this problem, we can look through the process of permutation:
- Pick a number from list and put as the first one.
- Pick the next number from the rest numbers in list.
- Repeat step 2 until all numbers are placed.
- Repeat step 1-3 to go through all possible permutations.
In practice, this process can be implemented via DFS. At each step of DFS, we pick up a number from rests and put it to the place corresponding to current DFS step (using swap). The recursion ends when the depth of DFS reach the length of array.
Code
py
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
ans = []
def pick_place(le, ri):
if le==ri:
ans.append(nums[:])
return
for i in range(le, ri):
nums[le], nums[i] = nums[i], nums[le]
pick_place(le+1, ri)
nums[le], nums[i] = nums[i], nums[le]
pick_place(0, len(nums))
return ans