给定一个不含重复数字的数组 nums
,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
示例 1:
输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
示例 2:
输入:nums = [0,1] 输出:[[0,1],[1,0]]
示例 3:
输入:nums = [1] 输出:[[1]]
方法一:可借助队列的思想
新建一个队列queue,先把nums的元素一个一个入队,然后依次从队头出队,和nums中的不同元素组合从队尾入队,反复此过程直到满足条件
代码如下:
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
queue = []
size = len(nums)
for i in nums:
queue.append([i])
while len(queue[0]) != size:
temp = queue.pop(0)
for i in nums:
if i not in temp:
queue.append(temp+[i])
return queue
方法二:递归
具体递归思想可通过代码慢慢阅读理解
代码如下:
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
def dfs(nums, size,path,res):
if len(path) == size:
res.append(path)
return
for i in range(size):
if nums[i] not in path:
dfs(nums, size,path+[nums[i]], res)
size = len(nums)
if len(nums) == 0:
return []
res = []
path = []
dfs(nums,size,path,res)
return res