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
广告