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

本文共 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

你可能感兴趣的文章
通过rhel7的kvm虚拟机实现3节点Postgres-XL(包括gtm standby)
查看>>
Visual Studio Code 前端调试不完全指南
查看>>
慕课网_《Java实现对称加密》学习总结
查看>>
到底什么是API经济
查看>>
好雨云帮如何对接Git Server
查看>>
【Android】关于参数的传递问题
查看>>
API文档自动生成
查看>>
ES6:Set和Map
查看>>
一个 js 中值传递和引用传递的坑。
查看>>
Visual Studio 2017新版发布,极大提高开发效率丨附下载
查看>>
研究人员发现:基于文本的AI模型容易受到改述攻击
查看>>
你的GitHub,怎么和我用的不太一样?
查看>>
白山云科技 CTO 童剑:空降后,如何有技术又有艺术地破局?
查看>>
关于移动端 1px 像素问题
查看>>
node.js简单爬虫
查看>>
eBay宣布发布全新的购买和销售APIs
查看>>
Scala.js:将Scala编译为JavaScript的编译器
查看>>
Cling旨在提供一款高性能的C++ REPL
查看>>
DevOps团队结构类型汇总:总有一款适合你
查看>>
理解浏览器是如何加载及渲染网页的
查看>>