括号的平衡表达式是这样的表达式,它以正确的顺序包含所有种类的括号对。这意味着,对于每个开括号,都有一个按正确顺序排列的闭括号,即{}。
表达式-{{[[] [] {})({} [] {})}
输出-平衡
现在,在这个问题中,我们必须根据给定数量的括号创建所有可能的平衡表达式,条件是给定位置具有开括号。
在这个问题中,我们得到一个整数n和一个长度为2n的括号的位置数组,并且我们必须找到长度为2n的平衡表达式的数量,以使用开括号标记的位置具有开括号' {'。
示例-
Input : n = 2 , position [1, 0 , 0 , 0].
Output : 2
Explanation : All possible outcomes are : {{}} , {}{}.所有带有一个的位置都是开放式括号。
使用以下规则使用递归循环,
如果(括号的数量-括号的数量)> 0,则返回0。
循环直到n且如果推入和弹出后的总括号为0,则返回1,即获得的解。否则返回0。
如果将1预先分配给该表达式,则在增加索引并增加括号总数时递归调用。
否则,通过在索引处插入方括号,然后为其插入封闭的方括号,并减少方括号的总数,然后移至下一个索引,以递归方式调用该函数。
#include <bits/stdc++.h>
using namespace std;
int find(int index, int openbrk, int n, int expression[]){
if (openbrk < 0)
return 0;
if (index == n){
if (openbrk == 0)
return 1;
else
return 0;
}
if (expression[index] == 1) {
return find(index + 1, openbrk + 1, n, expression);
} else {
return find(index + 1, openbrk + 1, n, expression) + find(index + 1, openbrk - 1, n, expression);
}
}
int main() {
int n = 3;
int expression[6] = { 1, 0, 1, 0, 0, 0};
cout << find(0, 0, 2 * n, expression) <<endl;
return 0;
}输出结果
3