class Solution(object):
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
全排列
"""
list_re=[]
list_curr=[]
len_nums=len(nums)
def DFS(deepth):
if deepth==len_nums:
list_re.append([i for i in list_curr])
else:
for i in range(len(nums)):
list_curr.append(nums.pop(0))
DFS(deepth+1)
nums.append(list_curr.pop())
DFS(0)
return list_re
class Solution(object):
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
全排列
"""
list_re=[]
list_curr=[]
len_nums=len(nums)
def DFS():
if nums==[]:
list_re.append([i for i in list_curr])
else:
for i in range(len(nums)):
list_curr.append(nums.pop(0))
DFS()
nums.append(list_curr.pop())
DFS()
return list_re
a=Solution()
nums = [1,2,3,4]
print a.permute(nums)
另一种递归出口的写法,不用深度,而是检查当前栈的元素
class Solution(object):
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
全排列
最好是别动原数组
那么改变状态和还原状态操作最好用一个标志位:Flase代表没有更新 True代表已更新
"""
list_re=[]
list_curr=[]
len_nums=len(nums)
def DFS(deepth):
if deepth==len(nums):
list_re.append([j for j in list_curr])
else:
for i in range(len(nums)):
if nums_d[i][1]==True:
pass
else:
nums_d[i][1]=True#改变状态
list_curr.append(nums_d[i][0])
DFS(deepth+1)#递归深度+1
nums_d[i][1]=False#还原状态
list_curr.pop()
nums_d=[[i,False]for i in nums]
DFS(0)
return list_re
第三种写法,好处是不用改动原数组,因此不改变本层其他子树的相对位置,47题这么做更容易