给定一个不含重复数字的数组
nums,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
标准回溯题,回溯的思想是一种试错 + 撤销的算法思想:
- 做出一个选择
- 递归走下去
- 发现走不通 / 走完了
- 撤销选择,回到上一步(这一步叫回溯)
python
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
res = []
def backtrack(path, used):
if len(path) == len(nums):
res.append(path.copy())
return
for i in range(len(nums)):
if not used[i]:
used[i] = True
path.append(nums[i])
backtrack(path, used)
path.pop()
used[i] = False
backtrack([], [False] * len(nums))
return res