回溯法
回溯法的本质是一个基于深度优先搜索(DFS)的穷举的过程
- 添加值
- 判定现有结果是否满足条件
- DFS
- 回退
简单回溯法的使用
-
问题:输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点 开始往下一直到叶结点所经过的结点形成一条路径。
-
解决:
class Solution: # 返回二维列表,内部每个列表表示找到的路径 def FindPath(self, root, expectNumber): path, spare = [],[] def recur(root,tar): if not root: return spare.append(root.val) tar -= root.val if not root.left and not root.right and tar == 0: path.append(list(spare)) recur(root.left, tar)#深度遍历 recur(root.right, tar) spare.pop() #回溯 recur(root,expectNumber) return path
字符串的排列
-
问题:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
-
解决:
class Solution: def Permutation(self, ss): # write code here res = [] cache = list(ss) def recur(x): if x == len(cache)-1: res.append("".join(cache)) return dic = [] for i in range(x,len(cache)): if cache[i] in dic: continue dic.append(cache[i]) cache[i], cache[x] = cache[x], cache[i] recur(x+1) cache[i], cache[x] = cache[x], cache[i] recur(0) return sorted(res)

浙公网安备 33010602011771号