C ++平衡表达式,使给定位置带有左括号

括号的平衡表达式是这样的表达式,它以正确的顺序包含所有种类的括号对。这意味着,对于每个开括号,都有一个按正确顺序排列的闭括号,即{}。

表达式-{{[[] [] {})({} [] {})}

输出-平衡

现在,在这个问题中,我们必须根据给定数量的括号创建所有可能的平衡表达式,条件是给定位置具有开括号。

在这个问题中,我们得到一个整数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