博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
输出所有的合法的括号组合
阅读量:4154 次
发布时间:2019-05-25

本文共 1163 字,大约阅读时间需要 3 分钟。

Implement an algorithm to print all valid (e. g. , properly opened and closed) combinations
of n-pairs of parentheses.
EXAMPLE:
input: 3 (e. g. , 3 pairs of parentheses)

output: ()()(), ()(()), (())(), ((())),(()())

两张方法都用了之前讲过的卡特兰数的原理

void genPar(vector
&vt,int sum, int beg, int end, int acc) { //第0位置肯定放(,那么和这个左括号匹配的右括号可能的位置是2*i+1,然后按照此类方法再去处理括号里面的元素和括号外面的元素 vt[beg] = '('; ++acc; if (beg + 1 == end && acc +1 == sum){ vt[end] = ')'; for (int j=0; j< sum; ++j) cout<
=3) genPar(vt,sum,beg+1, i - 1,acc + 1); if (end - i >=2) genPar(vt, sum, i+1,end,acc + i -beg ); }}void par(int left,int right, vector
&vt,int count) {//left表示左括号还剩余多少个。在递归过程中只要左括号还有剩余就一定可以放左括号,但是只有当剩余的右括号的数量大于剩余的左括号的数量时,才能放右括号 if (left <0 || right
0) { vt[count] = '('; par(left - 1,right,vt,count + 1); } if (right >left){ vt[count] = ')'; par(left,right - 1,vt,count + 1); }}int main() { int n =3; vector
vt(2*n); int acc = 0; genPar(vt,2*n,0,2*n - 1,acc); /*vector
vt(6); par(3,3,vt,0);*/ }

转载地址:http://pveti.baihongyu.com/

你可能感兴趣的文章
js实现全选单选的添加并添加和删除选择的元素
查看>>
微信小程序 手机号-验证码登录接口
查看>>
Access restriction: The method 'CharacterDecoder.decodeBuffer(String)' is not API
查看>>
MySQL锁等待问题(ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction)
查看>>
Eclipse设置Working Set管理项目和detach合并分离窗口
查看>>
java中大整型BigInteger及setBit和testBit方法
查看>>
网站优化之使用Free marker静态化网站文章页
查看>>
mysql免安装版配置和一些常见问题
查看>>
Tomcat配置域名、ip访问及解决80端口冲突
查看>>
详解Java反射机制
查看>>
网站优化之Tomcat启用Gzip压缩
查看>>
Linux下mysql的彻底卸载
查看>>
python爬虫解决极验验证码问题
查看>>
使用JS将table表格导出为excel
查看>>
java调用阿里云短信服务接口
查看>>
idea的个性配置
查看>>
Java获取访问者Ip并限制Ip访问页面
查看>>
Java读取src下配置文件的问题
查看>>
网页加载时waiting(TTFB)时间过长的问题解决
查看>>
Java时间日期相关工具类
查看>>