计算器小括号变大括号怎么打
Problem statement:
问题陈述:
Given N number of parenthesis (pair of opening and closing parenthesis), you have to count all the valid combinations of the parenthesis and print the value.
给定N个圆括号(一对圆括号),您必须计算所有有效的圆括号组合并打印该值。
Input:
First-line contains T Testcases,
T no. of lines along with an integer number.
E.g.
3
4
3
5
Constrains:
1≤ T ≤10
1≤ N ≤ 20
Output:
Print the number of possible valid combinations
of the parenthesis.
Example
例
T = 3
Input:
4
output:
14
{
(((()))), ((()())), ((())()), ((()))(), (()(())), (()()())
(()())(), (())(()), (())()(), ()((())),()(()()), ()(())()
()()(()), ()()()()
}
Input:
3
Output:
5
{
((())), (()()), (())(), ()(()), ()()()
}
Input:
5
Output:
37
{
((((())))), (((()()))), (((())())), (((()))()), (((())))()
((()(()))), ((()()())), ((()())()), ((()()))(), ((())(()))
((())()()), ((())())(), ((()))(()), ((()))()(), (()((())))
(()(()())), (()(())()), (()(()))(), (()()(())), (()()()())
(()()())(), (()())(()), (()())()(), (())((())), (())(()())
(())(())(), (())()(()), (())()()(), ()(((()))), ()((()()))
()((())()), ()((()))(), ()(()(())), ()(()()()), ()(()())()
()(())(()), ()(())()(), ()()((())), ()()(()()), ()()(())()
()()()(()), ()()()()()
}
Explanation with example:
举例说明:
To generate a valid combination with the parenthesis is a try and error process, and we will solve this problem with the recursion approach.
生成带括号的有效组合是一个尝试和错误的过程,我们将使用递归方法解决此问题。
To solve this problem, we will follow these steps,
为了解决这个问题,我们将按照以下步骤操作,
We have to initialize a count variable to zero, and an open variable is for open parenthesis, and a close variable is for close parenthesis.
我们必须将一个count变量初始化为零,一个open变量用于开括号,一个close变量用于闭括号。
Whenever the open is less than the number then we add an open parenthesis.
只要空位数小于数字,我们就会添加一个圆括号。
Whenever the open parenthesis is grater the closing parenthesis then we add closing parenthesis to it.
只要开放括号圆括号括起来,就要在其上加上封闭括号。
If the value of open parenthesis equals the number then we add one with the count.
如果开括号的值等于该数字,则我们将其加一。
C++ Implementation:
C ++实现:
#include <bits/stdc++.h>
using namespace std;
void traverse(int open, int close, int n, int& count, string str, vector<string>& v)
{
if (close == n) {
count++;
return;
}
if (open < n) {
traverse(open + 1, close, n, count, str + "(", v);
}
if (close < open) {
traverse(open, close + 1, n, count, str + ")", v);
}
return;
}
void genarate_parenthesis(int num)
{
string str = "";
int open_brace = 0, close_brace = 0, count = 0;
vector<string> v;
traverse(open_brace, close_brace, num, count, str, v);
cout << "Valid combinations : " << count << endl;
}
int main()
{
int t;
cout << "TestCase : ";
cin >> t;
while (t--) {
int num;
cout << "Enter the number: ";
cin >> num;
genarate_parenthesis(num);
}
return 0;
}
Output
输出量
TestCase : 3
Enter the number: 4
Valid combinations : 14
Enter the number: 3
Valid combinations : 5
Enter the number: 5
Valid combinations : 42
翻译自: https://www.includehelp.com/icp/count-the-combinations-of-the-parenthesis.aspx
计算器小括号变大括号怎么打