博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【100题】第四十六题 括号匹配
阅读量:6801 次
发布时间:2019-06-26

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

一,题目

       四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())

二,解答

        

        解法一:左右括号成一对则抵消

                        可以将左括号看成1右括号看成 -1,然后对8个数进行全排列

                        对每个排列判断,是否符合条件,逐个相加,sum>=0直到遍历完该序列,符合条件则count++

                         如果出现sum<0则失败

       解法二:采用八位bit,从0000 0000 1111 1111遍历,遇到0 -1遇到1 1

                        如果加完该序列所有位等于0,且递加过程中sum始终大于零则符合条件

三,源码

  
#include
#include
using namespace std ;void Print(vector
v){ for (vector
::iterator beg=v.begin();beg!=v.end();++beg) cout<<*beg<<" "; cout<
&v){ int nLeftBrackets=0; int nRightBrackets=0; for (vector
::iterator beg=v.begin();beg!=v.end();++beg) { if(*beg=='(') nLeftBrackets++; else nRightBrackets++; if(nRightBrackets>nLeftBrackets) return; if(nLeftBrackets+nRightBrackets==nSize&&nLeftBrackets==nRightBrackets) Print(v); } if (nLen>0) { v.push_back('('); MatchNums(nSize,nLen-1,v); v.pop_back(); v.push_back(')'); MatchNums(nSize,nLen-1,v); v.pop_back(); }}int main(){ vector
v; int n=4; MatchNums(n,n,v); return 1;}

转载于:https://www.cnblogs.com/secbook/archive/2012/08/20/2654961.html

你可能感兴趣的文章
手机移动端 用 rem 作单位时要注意的问题
查看>>
安卓新建项目 - 收藏集 - 掘金
查看>>
js基础 数组与字符串
查看>>
node异常总结
查看>>
Google Maglev 牛逼的网络负载均衡器
查看>>
商品区域goods.vue
查看>>
手把手教你封装网络层
查看>>
软件架构模式
查看>>
20170605-函数的arguments
查看>>
Angular 4.x FAQ
查看>>
Angular2学习笔记二(之创建ionic移动项目)
查看>>
Javascipt中精确小数运算的实现
查看>>
微软云数据库 Azure SQL DB Hyperscale如何实现超大规模存储和高可用?
查看>>
华为的汽车“攻势”
查看>>
超级账本HyperLedger初体验
查看>>
用基于模型和接口的T4来生成RESTful服务
查看>>
苹果裁撤自动驾驶项目员工200余人
查看>>
广深IT之行:传统模式与技术创新的融合
查看>>
「Android」 详细全面的基于vue2.0Weex接入过程(Android视角)
查看>>
关于CarbonData+Spark SQL的一些应用实践和调优经验分享
查看>>