回溯算法 | 代码随想录学习笔记

跟随carl代码随想录刷题
语言:python


回溯算法

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

组合

回溯算法 | 组合 | leecode刷题笔记

分割

回溯算法 | 分割字符串 | 复原IP地址 | leecode刷题笔记

子集

回溯算法 | 子集问题(递增子序列) | leecode刷题笔记

排列

回溯算法 | 排列问题 | leecode刷题笔记

棋盘

回溯算法 | N皇后 | leecode刷题笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值