什么是回溯法
回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。
无重复元素全排列问题
给定一个所有元素都不同的list,要求返回list元素的全排列。
设n = len(list),那么这个问题可以考虑为n叉树,对这个树进行dfs,这个问题里的回溯点就是深度(也就是templist的长度)为n时,回溯的条件就是当前元素已经出现在templist中了。
回溯法与递归:
回溯法是一种思想,递归是一种形式
class Solution(object):
#rtlist用来存储所有的返回所有排列,templist用来生成每个排列
def backtrack(self,rtlist,templist,nums):
if(len(templist) == len(nums)):
rtlist.append(templist[:])
else:
for i in nums:
if(i in templist): #如果在当前排列中已经有i了,就continue,相当于分支限界,即不对当前节点子树搜寻了
continue<