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


括号的平衡表达式是指包含所有类型括号的配对,并且顺序正确的表达式。这意味着每个左括号都有一个与其正确匹配的右括号,例如:{ }。

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

输出 − 平衡的

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

在这个问题中,我们给定一个整数n和一个长度为2n的括号位置数组,我们必须找到长度为2n的平衡表达式的数量,使得由左括号标记的位置将具有左括号'{'。

示例

Input : n = 2 , position [1, 0 , 0 , 0].
Output : 2
Explanation : All possible outcomes are : {{}} , {}{}.

算法

  • 所有位置为1的都是左括号。

  • 使用递归循环,使用以下规则:

    • 如果(左括号数 - 右括号数)> 0,则返回0。

    • 循环到n之后,如果push和pop之后的括号总数为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

更新于:2019年11月13日

178 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告