题目:
给定一个 没有重复 数字的序列,返回其所有可能的全排列。你可以 按任意顺序 返回答案。
思路:
回溯
解答:
方法一:回溯,使用used数组来记录元素是否出现过。
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
res=[]
path=[]
def tarcebacking(nums,used):
if len(path)==len(nums):
res.append(path[::])
return
for i in range(len(nums)):
if used[i]:
continue
used[i]=True
path.append(nums[i])
tarcebacking(nums,used)
path.pop()
used[i]=False
n=len(nums)
used=[False]*n
tarcebacking(nums,used)
return res
方法二:原始解答
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
res=[]
def backtrack(nums, tmp):
if not nums:
res.append(tmp)
return
for i in range(len(nums)):
backtrack(nums[:i] + nums[i+1:], tmp + [nums[i]])
backtrack(nums, [])
return res