Recursion n对括号的组合 @CareerCup

本文介绍了一种使用递归算法生成指定数量括号的所有有效组合的方法,并提供了实现代码。

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

看不太习惯书上写的递归,觉得没有自己写的清晰。

这道题唯一要满足的条件就是在任何时候,左括号数量一定要大等于右括号的数量。


package Recursion;

import java.util.HashSet;
import java.util.Set;

/**
 *Implement an algorithm to print all valid (e.g., properly opened and closed) combinations of n-pairs of parentheses.

EXAMPLE:

input: 3 (e.g., 3 pairs of parentheses)

output: ((())), (()()), (())(), ()(()), ()()()

译文:

实现一个算法打印出n对括号的有效组合。

例如:

输入:3 (3对括号)

输出:((())), (()()), (())(), ()(()), ()()()
 * 
 * 
 */
public class S9_6 {

	public static void main(String[] args) {
		Set<String> list = generateParens(3);
		for (String s : list) {
			System.out.println(s);
		}
		System.out.println(list.size());
	}
	
	public static Set<String> generateParens(int n){
		Set<String> set = new HashSet<String>();
		rec(set, n, 0, 0, "");
		return set;
	}
	
	public static void rec(Set<String> set, int n, int left, int right, String s){
		if(right > left){				// 不合法的括号
			return;
		}
		
		if(left==n && right==n){	// 成功找到一组
			set.add(s);
			return;
		}
		
		if(left>n || right>n){		// 越界情况
			return;
		}
		
		rec(set, n, left+1, right, s+"(");		// dfs
		rec(set, n, left, right+1, s+")");
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值