题目描述:
题解:回溯
参考:力扣
1.res保存最终结果,path对应一个全排列,used记录nums中的数字是否已经被使用,初始化为全0.
2.dfs函数中,依次对nums中的数进行判断,如果当前数字对应used为0,则加入path,然后在下一层调用dfs,然后依次回溯。如果当前depth等于nums的长度,则说明找到一种全排列,加入res,但要注意必须使用res.append(path[:])的方式,否则结果全空,因为最终回溯到根结点的path均为空。
class Solution(object):
def permute(self, nums):
n = len(nums)
if n==0:
return []
used = [0 for i in range(n)]
res = []
def dfs(nums,n,depth,path,used,res):
if depth==n:
res.append(path[:])
return
for i in range(n):
if used[i]==0:
used[i] = 1
path.append(nums[i])
dfs(nums,n,depth+1,path,used,res)
used[i] = 0
path.pop()
dfs(nums,n,0,[,used,res])
return res



