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
广告
数据结构
网络
关系数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP