给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
【中等】
【分析】记忆化回溯法。利用数组来实现记忆化。回溯法常用的代码块,其实也是dfs递归的常用代码模板。
class Solution(object):
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
if len(nums)<=1:
return [nums]
seen=[0 for _ in range(len(nums))]
res,path,length=[],[],0
self.backtrack(nums,0,seen,path,res)
return res
def backtrack(self,nums,length,seen,path,res):
"""
length表示path的长度
seen记忆化加入path的nums,0表示该num还没有加入path,1则反之
"""
if length==len(nums):
res.append(path[:])
ret