跟随carl代码随想录刷题
语言:python
回溯算法
- 概念
回溯法
也称回溯搜索法
,是一种搜索方式。- 回溯是递归的副产品,只要有递归就会有回溯。
回溯函数
就是递归函数
。- 回溯法解决的问题可以抽象为
树形结构
。集合的大小
构成了树的宽度
,递归的深度
构成了树的深度
。 - 因为递归有终止条件,所以必然是一棵高度有限的树(N叉树)
- 回溯法的效率
- 回溯算法不是高效的算法
- 🙋那为什么还要用回溯法呢?
- 😭有些问题只能暴力搜索
- 本质是
穷举
,穷举所有可能,选出想要的答案。
- 回溯算法不是高效的算法
- 回溯法解决的问题
- 组合问题:N个数里面按一定规则找出k个数的集合
- 注意:
组合
不强调元素顺序,排序
强调元素顺序【组合无序,排序有序
】
- 注意:
- 切割问题:一个字符串按一定规则有几种切割方式
- 子集问题:一个N个数的集合里有多少符合条件的子集
- 排列问题:N个数按一定规则全排列,有几种排列方式
- 棋盘问题:N皇后,解数独等等
- 组合问题:N个数里面按一定规则找出k个数的集合
- 回溯三部曲
- 回溯函数
backtracking(参数)->返回值类型
:返回值
一般为void
参数
不容易一次确定好,所以先写逻辑,后序用到什么参数再填
- 回溯函数的终止条件
if 终止条件:
存放结果
return
- 回溯搜索的遍历过程
for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小))
# 遍历集合区间。有多少个节点,for循环就执行多少次横向遍历处理节点
backtracking(路径,选择列表)
# 递归 纵向遍历回溯,撤销处理结果
- 回溯函数
组合
分割
回溯算法 | 分割字符串 | 复原IP地址 | leecode刷题笔记
子集
回溯算法 | 子集问题(递增子序列) | leecode刷题笔记