题目:四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())
分析题目可以得出两个限制条件,a:左右括号数量相同; b:从左往右数,右括号数量不能大于左括号。
方法1:递归的方法,同时满足上面两个条件
void matching(int left, int right, vector<char> & src, int sum, const int N, int &cnt) { int t = N<<1; if(left < right) return; if(sum == t) { for(int i=0; i< t; i++) cout<<src[i]; cout<<endl; cnt++; } if(left < N) { src.push_back('('); left++; sum++; matching(left, right, src, sum, N,cnt); src.pop_back(); left--; sum--; } if(right < N) { src.push_back(')'); right++; sum++;