leetcode中有两道经典的题目,求一个数组的排列和组合,都可以用深度优先递归搜索的方式来求解,让我们一起来look look。
排列[ Permutations ]
题:Given a collection of distinct integers, return all possible permutations.
Example:
Input: [1,2,3]
Output:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
思路:可以把全排列问题进行分解,变成子问题直至可以直接求解。nums = [1,2,3],可以先固定1,然后将 [2,3] 进行全排的结果加上1即可,之后再固定2,全排[1,3],依次类推…
下面为对应的代码,固定某个数,即将它放在start位置,再对start之后的数递归全排
要注意的是,在递归完成之后,要将原来调换位置的两个数换回来,使得下一次的调换还是基于原来的顺序
因为它是全排列,所以它的DFS搜索要到n才结束
对于递归,要理解的一个关键点是,递归函数前面的部分是正向运行的,后面的部分是逆向运行的。
class Solution:
def permute(self, nums):
res = []
self.func(nums, 0 ,res)
return res
def func(self,