本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略、各个类型经典题目刷题顺序、思维导图,可以fork到自己仓库,有空看一看一定会有所收获,如果对你有帮助也给一个star支持一下吧!

周一

本周我们正式开始了回溯算法系列,那么首先当然是概述。

在关于回溯算法,你该了解这些!中介绍了什么是回溯,回溯法的效率,回溯法解决的问题以及回溯法模板。

回溯是递归的副产品,只要有递归就会有回溯

回溯法就是暴力搜索,并不是什么高效的算法,最多在剪枝一下。

回溯算法能解决如下问题:

  • 组合问题:N个数里面按一定规则找出k个数的集合
  • 排列问题:N个数按一定规则全排列,有几种排列方式
  • 切割问题:一个字符串按一定规则有几种切割方式
  • 子集问题:一个N个数的集合里有多少符合条件的子集
  • 棋盘问题:N皇后,解数独等等

是不是感觉回溯算法有点厉害了。

回溯法确实不好理解,所以需要把回溯法抽象为一个图形来理解就容易多了,每一道回溯法的题目都可以抽象为树形结构。

针对很多同学都写不好回溯,我在关于回溯算法,你该了解这些!用回溯三部曲,分析了回溯算法,并给出了回溯法的模板。

这个模板会伴随整个回溯法系列!

周二

在回溯算法:求组合问题!中,我们开始用回溯法解决第一道题目,组合问题。

我在文中开始的时候给大家列举k层for循环例子,进而得出都是同样是暴利解法,为什么要用回溯法。

此时大家应该深有体会回溯法的魅力,用递归控制for循环嵌套的数量!

本题我把回溯问题抽象为树形结构,可以直观的看出其搜索的过程:for循环横向遍历,递归纵向遍历,回溯不断调整结果集

周三

针对回溯算法:求组合问题!还可以做剪枝的操作。

在回溯算法:组合问题再剪剪枝中把回溯法代码做了剪枝优化,在文中我依然把问题抽象为一个树形结构,大家可以一目了然剪的究竟是哪里。

剪枝精髓是:for循环在寻找起点的时候要有一个范围,如果这个起点到集合终止之间的元素已经不够 题目要求的k个元素了,就没有必要搜索了

周四

在回溯算法:求组合总和!中,相当于 回溯算法:求组合问题!加了一个元素总和的限制。

整体思路还是一样的,本题的剪枝会好想一些,即:已选元素总和如果已经大于n(题中要求的和)了,那么往后遍历就没有意义了,直接剪掉

在本题中,依然还可以有一个剪枝,就是回溯算法:组合问题再剪剪枝中提到的,对for循环选择的起始范围的剪枝。

所以,剪枝的代码,可以把for循环,加上 i <= 9 - (k - path.size()) + 1 的限制!

组合总和问题还有一些花样,下周还会介绍到。

周五

在回溯算法:电话号码的字母组合中,开始用多个集合来求组合,还是熟悉的模板题目,但是有一些细节。

例如这里for循环,可不像是在 回溯算法:求组合问题!和回溯算法:求组合总和!中从startIndex开始遍历的。

因为本题每一个数字代表的是不同集合,也就是求不同集合之间的组合,而回溯算法:求组合问题!和回溯算法:求组合总和!都是是求同一个集合中的组合!

如果大家在现场面试的时候,一定要注意各种输入异常的情况,例如本题输入1 * #按键。

其实本题不算难,但也处处是细节,还是要反复琢磨。

周六

因为之前链表系列没有写总结,虽然链表系列已经是两个月前的事情,但还是有必要补一下。

所以给出链表:总结篇!,这里对之前链表理论基础和经典题目进行了总结。

同时对链表:环找到了,那入口呢?中求环入口的问题又进行了补充证明,可以说把环形链表的方方面面都讲的很通透了,大家如果没有做过环形链表的题目一定要去做一做。

总结

相信通过这一周对回溯法的学习,大家已经掌握其题本套路了,也不会对回溯法那么畏惧了。

回溯法抽象为树形结构后,其遍历过程就是:for循环横向遍历,递归纵向遍历,回溯不断调整结果集

这个是我做了很多回溯的题目,不断摸索其规律才总结出来的。

对于回溯法的整体框架,网上搜的文章这块一般都说不清楚,按照天上掉下来的代码对着讲解,不知道究竟是怎么来的,也不知道为什么要这么写。

所以,录友们刚开始学回溯法,起跑姿势就很标准了,哈哈。

下周依然是回溯法,难度又要上升一个台阶了。

最后祝录友们周末愉快!

如果感觉「代码随想录」不错,就分享给身边的同学朋友吧,一起来学习算法!

我是程序员Carl,可以找我组队刷题,也可以在B站上找到我,本文leetcode刷题攻略已收录,更多精彩算法文章尽在公众号:代码随想录,关注后就会发现和「代码随想录」相见恨晚!

如果感觉对你有帮助,不要吝啬给一个

「leetcode」本周小结!(回溯算法系列一)相关推荐

  1. 「leetcode」最强回溯算法总结篇!历时21天、画了20张树形结构图、14道精选回溯题目精讲

    本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略.各个类型经典题目刷题顺序.思维导图,可以fork ...

  2. 八十四、Python | Leetcode回溯算法系列

    @Author:Runsen @Date:2020/7/7 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  3. 「leetcode」332.重新安排行程【回溯算法/深搜】详细图解!

    本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略.各个类型经典题目刷题顺序.思维导图,可以fork ...

  4. js实现kmp算法_「leetcode」459.重复的子字符串:KMP算法还能干这个!

    不瞒你说,重复子串问题,KMP很拿手 题目459.重复的子字符串 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: ...

  5. 消除左递归c++代码_「leetcode」129. 求根到叶子节点数字之和【递归中隐藏着回溯】详解...

    链接 https://leetcode-cn.com/problems/sum-root-to-leaf-numbers/ 思路 本题和113.路径总和II是类似的思路,做完这道题,可以顺便把113. ...

  6. c++矩阵连乘的动态规划算法并输出_「Javascript算法设计」× 动态规划与回溯算法...

    目录: 分而治之算法 动态规划 回溯算法 分而治之算法 分而治之算法是算法设计的一种方式,它将一个问题分成多个和原问题相似的小问题,递归解决小问题,再将解决方式合并以解决原来的问题(例如快速排序,二分 ...

  7. 消除左递归实验代码_「leetcode」108. 构造二叉搜索树【递归】【迭代】详解!

    构造二叉搜索树,一不小心就平衡了 ❞ 108.将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树 ...

  8. 二维数组删除_「leetcode」数组:总结篇!(一文搞懂数组题目)

    数组理论基础 数组是非常基础的数据结构,在面试中,考察数组的题目一般在思维上都不难,主要是考察对代码的掌控能力 也就是说,想法很简单,但实现起来 可能就不是那么回事了. 首先要知道数组在内存中的存储方 ...

  9. 消除左递归实验代码_「leetcode」669. 修剪二叉搜索树:【递归】【迭代】详解!

    单纯移除一个节点那还不够,要修剪! ❞ 669. 修剪二叉搜索树 题目链接:https://leetcode-cn.com/problems/trim-a-binary-search-tree/ 给定 ...

  10. 七十六、Python | Leetcode二分查找和分治算法系列

    @Author:Runsen @Date:2020/7/4 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

最新文章

  1. Oculus和虚拟现实的无限可能
  2. oracle 11g dataguard安装出现的错误
  3. eeglab教程系列(8)-数据叠加平均{2}绘制2D和3D图
  4. sqlserver date类型和字符串比较_基于SQL Server数据库搭建主从复制实现读写分离实战演练...
  5. 还有那个bspider不知道哪里的飞鸽传书
  6. ROS笔记(22) Gmapping
  7. OpenAI高调站队Pytorch,怎样学Pyorch?
  8. Python脚本-导出SQL查询结果到Excel文件
  9. 利用DOSBox运行汇编超详细步骤
  10. C语言求质数的几种简单易懂方法
  11. vue 点击某一行的按钮,获取当前行的数据
  12. 利用高效的css 提高你的开发效率~(下)
  13. 半加器 全加器 Verilog描述
  14. ffmpeg新手成长之路——使用av_seek_frame做seek定位
  15. unity 纹理压缩 内存优化
  16. android tv 云播放器,Android TV开发总结(六)构建一个TV app的直播节目实例
  17. Google Pixel手机解锁 bootloader
  18. 快捷方式自动修复小工具
  19. 模糊C均值聚类算法的实现
  20. stm32f103c8t5点灯

热门文章

  1. 第一篇:CUDA 6.0 安装及配置( WIN7 64位 / 英伟达G卡 / VS2010 )
  2. c++中vector的学习
  3. 转:windows xp 安装MYSQL 出现Error 1045 access denied 的解决方法
  4. 接受-拒绝采样/拒绝采样(accept-reject sampling/reject sampling)
  5. tensorflow的GPU使用--Python
  6. 用pc浏览器打开手机页面
  7. bzoj千题计划278:bzoj4590: [Shoi2015]自动刷题机
  8. PCB设计中电源与地之间电容的作用(具体放置面积, 大小等等)
  9. 在VB中使用Linq To SQLite注意事项
  10. 薰衣草紫色调人像lr/ps/luts预设