全排列问题,可以从动态规划状态方程考虑,也可以从回溯法考虑,二者代码递归形式的代码是一致的,但是理解的角度不同
动态规划:
class Solution2:
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
result =[]
end = len(nums)
def permute_recursion(nums,start):
if start == end-1:
result.append(nums[:])
for i in range(start,end):
nums[i],nums[start] = nums[start],nums[i]
permute_recursion(nums,start+1)
nums[i],nums[start] = nums[start],nums[i]
return result
return permute_recursion(nums,0)
回溯法,全排列的回溯法:
class Solution:
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
result =[]
num = len(nums)
def backtracking(depth,nums):
if depth == num-1:
result.append(nums[:])
else:
for i in range(depth,num):
nums[i],nums[depth] = nums[depth],nums[i]
backtracking(depth+1,nums)
nums[i],nums[depth] = nums[depth],nums[i]
return result
return backtracking(0,nums)
注意python复制数组注意使用切片,如果是复制数据,或者把数据加入到一个列表里,千万要使用切片,不要使用其名称,python里名称是指针,后续数据变化了,列表里面的数据也会变化。