1.【力扣刷题】合并两个有序链表2.【力扣】旋转链表3.【力扣】删除链表中的结点4.【力扣】反转链表II5.【力扣】分隔链表6.【力扣】删除排序链表中的重复元素II7.【洛谷】奖学金(结构体排序)8.【洛谷】明明的随机数(双指针去除重复元素)9.【洛谷】求第k小的数字(分治算法)10.【洛谷】阶乘之和(高精度运算)11.【洛谷】闰年12.【洛谷】数的性质13.【洛谷】虫子吃苹果14.【力扣】奇偶链表15.【力扣】不同路径II(动态规划)16.【力扣】数楼梯(动态规划)(看来高精度不学不行了)17.【力扣】斐波那契数列(动态规划入门)18.【力扣】最大子数组和(贪心)19.【力扣】摆动序列(贪心)20.【力扣】排列问题(回溯法)(去重)21.【力扣】排列问题(回溯法)(memset函数初始化数组)22.【力扣】非递减子序列23.【力扣】子集II(回溯法)(排序函数的一种隐藏用法?)24.【力扣】复原IP地址(回溯法)(分割问题)25.【力扣】分割回文串(回溯法)26.【力扣】组合总和3(组合的去重)27.【力扣】组合总数(回溯法)28.【力扣】电话号码的组合(回溯法)29.【力扣】求组合(回溯算法)30.【力扣】括号匹配(栈的应用)31.【力扣】组合总数(另一种整数溢出)32.【CUMTOJ】法师康工人(代码细节控制)33.【代码随想录】零钱兑换34.【代码随想录】零钱兑换II(关于组合与排列的区别)35.【代码随想录】完全背包36.【力扣】岛屿数量(体会一下dfs和bfs思路的实质)37.【代码随想录】广度优先搜索
38.【代码随想录】深度优先搜索
39.【力扣】重新安排行程(很难的回溯题)(未完待续)40.【力扣】零和一(不是多重背包)41.【力扣】最长公共子序列(动态规划)(还是得学套路才能会做)42.【力扣】目标和(新鲜的01背包题)43.【力扣】分割等和子集(不太像01背包的01背包)44.【力扣】加油站(读题)首先了解一下深度优先搜索和回溯法的区别
可以看出这两种方法在思路上可以说没什么区别,但是由于在具体实现方面的区别,有着不同的应用场景。
我的理解是,回溯法很多时候是应用在抽象的枚举过程中的,而dfs算法很多时候是用在图或者树这种实际的几何图形中的。
比较一下回溯的模版和dfs的模版:
dfs思路分析三步骤:
1.确定dfs函数和参数
(其实就相当于回溯法里的全局变量path和res)
2.确定递归终止函数
3.dfs函数内的操作
(不用多说,和回溯的分析一样)
总结
dfs可以说在各种地方都和回溯的思路一样,只不过应用场景不同造成实现的细节上有差别。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术