蓝桥杯——括号组合

这篇博客探讨了如何使用递归算法解决括号的合法组合问题。当有5对括号时,通过递归函数`process()`,计算出共有`n!/(n/2)!^2`种合法的括号组合方式。程序通过判断左右括号数量关系避免无效组合,最终输出合法组合的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【问题描述】

当拥有一对括号时,括号的合法组合有一种为(),当有两对括号时,有合法组合两种为()(),(()),请问当括号有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;
		
	} 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值