回溯题目的套路总结

打印 上一主题 下一主题

主题 1886|帖子 1886|积分 5658

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
媒介    

昨天写完了LeeCode的7,8道回溯算法的题目,写一下总结,这类题目的共同特点就是暴力搜索题目,分列组合或者递归,罗列出所有大概的答案,思绪很简单,实现起来的套路也很通用,一回溯题目为例,常用的是构建一颗搜索树,bfs,dfs
模板
函数名(递归参数)
if(这里是终止条件)
{
一般达到终止条件就需要把答案放入
}
for()
{
push,压入元素,
函数名(递归参数)//这里是往下一层举行递归
pop递归失败,弹出压入的元素
}
这里是写了一个大致的模板,实际的题目还要对照画出一颗树形图更合适,并且方便明确
例题


这里参考力扣的括号生成,画出搜索树

这道题的思绪就是暴力搜索,我们遍历所有大概的括号搜索情况,题目的关键就是构建回溯函数
回溯函数构建的正确,才能得到正确的分支

例题1的参考代码

  1. class Solution {
  2. public:
  3.     vector<string>res;
  4.     vector<string> generateParenthesis(int n) {
  5.         string s;
  6.         dfs(n, 0, 0, s);
  7.         return res;
  8.     }
  9.     void dfs(int n, int l, int r, string s)
  10.     {
  11.         if (l == n && r == n)res.push_back(s);
  12.         else {
  13.             if (l < n)dfs(n, l + 1, r, s + "(");
  14.             if (r<n && l>r)dfs(n, l, r + 1, s + ")");
  15.         }
  16.     }
  17. };
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

尚未崩坏

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表