括号的平衡表达式是这样的表达式,它以正确的顺序包含所有种类的括号对。这意味着,对于每个开括号,都有一个按正确顺序排列的闭括号,即{}。
表达式-{{[[] [] {})({} [] {})}
输出-平衡
现在,在这个问题中,我们必须根据给定数量的括号创建所有可能的平衡表达式,条件是给定位置具有开括号。
在这个问题中,我们得到一个整数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