【问题描述】
当拥有一对括号时,括号的合法组合有一种为(),当有两对括号时,有合法组合两种为()(),(()),请问当括号有5对时,能有多少种合法组合。
/**
* @author quanran
* @create 2021-12-05 12:11
*/
public class Bracket {
//主方法 也可以换成用键盘输入 n
// n 组合的对数
public static void main(String[] args) {
int n = 5;
int ans = process(0,0,n);
System.out.println(ans);
}
// 思路:
// left 代表 "(" right 代表 ")"
// 往下递归时候,如果出现 right的数量 > left的数量 那就肯定是错误的 !!!!!!!!中心点
//例子: ( ) ) ) 后面无论你还有多少个"(" 你都无法闭合前面的 ")" ")" ")"
// 如果 right 或者 left > n 那也肯定错误,因为本来就这么多个组合,数量不能超过
public static int process (int left , int right , int n) {
//都是违反的
if(right > left || left > n || right > n) {
return 0;
}
//如果条件都不违法,且都达到了该放的数量,那就是合法的组合
if (left == n && right == n) {
return 1;
}
//如果括号还没放完
int ans = 0; //这是最终结果
ans = process(left + 1 , right , n); //尝试放一个left括号 ,然后让它自己往下去尝试吧
ans += process(left , right + 1 , n);// 尝试放一个right括号,然后让它自己往下尝试吧
//而它只有两条路可以走,让ans累加起来,就是最终结果
return ans;
}
}