Permutations
全排列
Given an array nums of distinct integers, return all the possible permutations. You can return the answer in any order.
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
if len(nums)==1:
return [nums]
result=[]
visited={} #for hash table
for num in nums:
visited[num]=False
self.backtracking(nums,result,visited,[])
return result
def backtracking(self,nums,result,visited,lst):
if len(lst)==len(nums):
result.append(lst[:]) #copy
return
for num in nums:
if (visited[num])==False:
lst.append(num)
visited[num]=True
self.backtracking(nums,result,visited,lst)
lst.pop()
visited[num]=False
- 找到所有可能的全排列—递归
- 剪枝条件–:组合的长度=3
- 数字是单个唯一的,不能重复
- 在做递归的时候,如果脑子里面想不出来递归的路径,则需要画出来
(1) 需要指出来的是,最开始我是这样写的: if len(lst)==len(nums): result.append(lst) ,得出来的结果是全[[],[],[]]
这是由list的浅copy导致的。
lst[:]相当于第一层是深拷贝
(2) 第二个的错误。忘记了pop(),使得结果一直为[[1,2,3]]