DFS-lintcode生成括号
来源:互联网 发布:淘宝女装客服话术 编辑:程序博客网 时间:2024/05/29 08:21
组合的问题往往用DFS搜索,关键是如何组合能满足合法括号的条件,可以用图来进行思考:以n=3为例
A:由于n=3,只能有3个左括号,3个右括号,已经有了3个左括号,不能再放左括号了,故只能再往右侧走,得到((()))
B:同上,(()(已经有3个左括号了,只能再放右括号,往C走,得到(()())
D:(())(已有3个左括号了,只能放右括号,得到(())()
继续往后,可以得到剩余的组合
推到这里,也可以看出基本的思路:左括号次数为l,有括号次数为r,当l==n时左括号用完了,再往后增加n-r个右括号就得到了一个括号组合;若左括号没用完,则放左括号;只有当l>r时才可以放右括号,转换为代码如下:
class Solution {public: /* * @param n: n pairs * @return: All combinations of well-formed parentheses */ vector<string> generateParenthesis(int n) { // write your code here vector<string> result; generate(result,n,"",0,0);//初始时左右括号次数为0 return result; } //DFS void generate(vector<string>& result,int n,string s,int l,int r){ if(l==n){//左括号已经用完了,则要在后面追加右括号,这是收敛条件 result.push_back(s.append(n-r,')')); return; } //进入到这里,说明l<n,则可以继续放左括号 generate(result,n,s+"(",l+1,r); if(l>r)//可以放右括号 generate(result,n,s+")",l,r+1); }};
阅读全文
1 0
- DFS-lintcode生成括号
- LintCode : 生成括号
- LintCode-生成括号
- LintCode:生成括号
- LintCode:生成括号
- lintcode,生成括号
- 生成括号-lintcode
- lintcode -- 生成括号
- LintCode 生成括号
- 生成括号-LintCode
- lintcode刷题--生成括号
- lintcode--生成括号
- [Lintcode]Generate Parentheses 生成括号
- Generate Parentheses 生成括号-- LintCode题解
- lintcode括号匹配
- 生成括号
- 生成括号
- 生成括号
- 把数组排列成最小的数
- 进制转换
- pycharm错误运行报告(完善中)
- 安卓调用手机自带的浏览器
- Tesseract-OCR 安装
- DFS-lintcode生成括号
- JavaNIO学习之Buffer
- HTTP
- 百度定位
- Spring 开启Annotation <context:annotation-config> 和 <context:component-scan>诠释及区别
- JS显示当前时间(包含农历时间)
- mac系统如何设置输入ipython对应2.X、输入ipython3对应3.X版本python
- 随笔小记--微博手动扩容来解决因新热搜“鹿晗关晓彤恋情”引起的down机
- 数据库SQL优化大总结之 百万级数据库优化方案