给定一个不含重复数字的数组 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]]
思路:最后存在result一定是pai.copy(),因为所有的pai即便是传参也是相当于同一个对象(就是只是地址)。
比较巧妙的在于可以通过交换元素,来控制还未选择的元素都集中在nums数组后半部分。
python
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
result = []
pai=list()
def dfs(first:int):
if first==len(nums):
result.append(pai.copy())
return
for i in range(first,len(nums)):
pai.append(nums[i])
nums[first] ,nums[i]= nums[i],nums[first]
dfs(first+1)
pai.pop()
nums[first] ,nums[i]= nums[i],nums[first]
dfs(0)
return result