给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
思路:寻找所有可能的组合,涉及到搜索问题,可采用回溯法+递归实现。基本思想每次将数组的一个数放到最前面,然后再对剩下的数组进行类似的操作
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
# if not nums:return [[]]
# result=[]
# for i in range(len(nums)):
# for j in self.permute(nums[:i]+nums[i+1:]):
# result.append([nums[i]]+j)
# return result
if not nums:return []
n=len(nums)
result=[]
def helper(nums,temp):
if not nums:
result.append(temp)
return
for i in range(len(nums)):
helper(nums[:i]+nums[i+1:],temp+[nums[i]])
helper(nums,[])
return result
注释与未注释部分均可实现该算法,未注释部分开辟了一个新的临时变量temp用于存储每次遍历完后形成的子列表。