括号的匹配方法

原创 2012年03月29日 17:53:21

输入括号的数目,输出括号的各种合法匹配样式 如

输入 2

输出 

 ( ())

()()

据说这是一道某公司的面试题,我们先来分析一下。括号匹配有合法有的不合法 如 (()))( 这样就不是合法的匹配样式。为了避免这种情况的出现,记录当前左括号的个数和右括号的个数,使右括号的个数不大于左括号的个数。主要思想类似于0-1背包问题,当进行到某一步的时候 有两种方法:放'(' 和 放 ')'

void maching(int left,int right,int sum,vector<char> bracket)
{
	if (left==sum&&right==sum)  //如果左边和右边都为要匹配的个数,则输出结果
	{
		vector<char>::iterator iter=bracket.begin();
		for ( ;iter!=bracket.end();iter++)  
		{
			cout<<*iter<<' ';
		}
		cout<<endl;
		return ;
	}
	if (left<=sum)
	{
		bracket.push_back('(');    //放入左括号,然后递归
		maching(left+1,right,sum,bracket);
		bracket.pop_back();        //递归后弹出左括号
	}
	
	if (left>right&&left<=sum)
	{
		bracket.push_back(')');
		maching(left,right+1,sum,bracket);
		bracket.pop_back();
	}
}
int main(int argc, char* argv[])
{
	vector<char> bracket;    //记录当前的匹配样式
	int num;
	cin>>num;                //输入括号的个数 
	maching(0,0,num,bracket);
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

关于括号匹配数目的动态规划算法的解决方法

前段时间在做关于华为OJ平台的闯关题目,第三关中有一道关于

括号匹配方案

问题一个串只包含有’(‘和’)’,如果每个左括号都能和一个右括号匹配,且左括号在左边,右括号在右边,那么称这个串是括号匹配的。比如”(())”,”()()”都是括号匹配的,”)(“,“())(“都不是...

n对括号的匹配方式(卡特兰数)

4对括号有多少种可能的合法匹配方式?n对括号呢? 此题是卡特兰数的一个通常应用,相似的还有出栈顺序等。关于卡特兰数的具体内容,请参阅百度百科或Wiki. http://baike.baidu....
  • immiao
  • immiao
  • 2013-11-23 22:53
  • 1395

微软100题(46)括号的匹配方式

题目: 四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(()) 这道题是典型的卡特兰数题目,这类题目包括,二叉树的枚举、多边形分成三角形的个数、圆括弧插入公式中的方法...

数据结构实验之栈四:括号匹配(两种方法实现栈)

数据结构实验之栈四:括号匹配 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  给你一串字符,不超过50个字符,可能包括括...

括号的匹配(简单)

括号的匹配 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total S...

利用栈实现括号匹配算法!

算法:检测表达式中的字符,若是左括号就入栈,如果是右括号就出栈一个元素与其配对,配对成功则继续访问下一个字符,否则退出。出现非括号字符则跳过。 #include #include //ma...

卡特兰数定义及其几个常用的应用(附例子"括号匹配"代码)+应用总结

1.定义:卡特兰数:规定h(0)=1,而h(1)=1,h(2)=2,h(3)=5,h(4)=14,h(5)=42,h(6)=132,h(7)=429,h(8)=1430,h(9)=4862,h(10)...

神奇数

给出一个区间[a, b],计算区间内“神奇数”的个数。 神奇数的定义:存在不同位置的两个数位,组成一个两位数(且不含前导0),且这个两位数为质数。 比如:153,可以使用数字3和数字1组成13,1...

括号匹配问题与经典笔试面试题目解析

括号匹配问题是用“栈”这种数据结构来解决的一道典型问题,本文由此引申,谈到了Leetcode中多道与此有关的问题或变种题,这是笔试面试中非常常见的一种类型题目。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)