算法: 回溯

前言

回溯算法的本质是对树型或者图型结构进行一次深度优先搜索,是一种暴力搜索算法,因此其时间复杂度是较高的,为指数级别。

题目列表

题目链接
77. 组合https://leetcode.cn/problems/combinations/
39. 组合总和https://leetcode.cn/problems/combination-sum/
40. 组合总和 IIhttps://leetcode.cn/problems/combination-sum-ii/
216. 组合总和 IIIhttps://leetcode.cn/problems/combination-sum-iii/
17. 电话号码的字母组合https://leetcode.cn/problems/letter-combinations-of-a-phone-number/
131. 分割回文串https://leetcode.cn/problems/palindrome-partitioning/
93. 复原 IP 地址https://leetcode.cn/problems/restore-ip-addresses/
78. 子集https://leetcode.cn/problems/subsets/
90. 子集 IIhttps://leetcode.cn/problems/subsets-ii/
491. 递增子序列https://leetcode.cn/problems/increasing-subsequences/
46. 全排列https://leetcode.cn/problems/permutations/
47. 全排列 IIhttps://leetcode.cn/problems/permutations-ii/
51. N 皇后https://leetcode.cn/problems/n-queens/
37. 解数独https://leetcode.cn/problems/sudoku-solver/
22. 括号生成https://leetcode.cn/problems/generate-parentheses/

思考与总结

从题目列表来看,几乎所有的回溯算法全部可以用一个树形图来帮助我们设计程序。只有深刻理解如何绘制树形图,才能设计出回溯算法,并做出相应的剪枝操作来提升算法的效率。

代码随想录中总结了一套“回溯三部曲”较为实用,如下:

  1. 函数参数及返回值
  2. 终止条件
  3. 单层循环逻辑

其中还提供了一个回溯算法的代码模板,学习前期可以根据这个模板感受回溯算法的表象,慢慢地再深刻理解其本质,具体内容见参考资料[1]。

根据题目列表,可以将回溯算法简单分为如下几类[1]:

  • 组合问题
  • 分割问题
  • 子集问题
  • 排列问题
  • 棋盘问题

排列问题组合问题中,要深刻理解去重的原理。

参考资料

[1] 代码随想录

[2] https://leetcode.cn/tag/backtracking/problemset/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

此人姓于名叫罩百灵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值