【字符串-6】leetcode22:括号生成(Generate Parentheses)

本文介绍了一种使用递归算法生成所有可能的有效括号组合的方法。对于给定的括号对数n,算法能生成所有合法的括号序列,如n=3时,结果为[((()))(()())(())()()(())()()()]。文章详细解释了递归过程及边界条件,展示了如何避免非法括号组合。

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

题目描述参考链接

题目描述:

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

例如,给出 n = 3,生成结果为:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]

思想:
  • 这种列出所有情况的考虑使用递归,由于只有左右字符串,所以最终生成的串必定n个左n个右括号
  • 定义left和right表示左右括号的剩余数字,考虑非法情况…即剩余的左括号大于右括号,说明出现)(,非法,直接返回
  • 合法递归停止条件:right和left均为0,递归结束,保存结果,进行返回
  • 否则通过比较left与right和0的大小,进行递归,直到递归完毕产生所有合法的可能字符串

PS:主要考察递归的使用,注意List的使用和字符串拼接即可

import java.util.ArrayList;
import java.util.List;

public class test1 {	
	public static List<String> generateParentheses(int n){
		List<String> res = new ArrayList<String>();
		helper(n, n, "", res);
		return res;
	}
	
	public static void helper(int left, int right, String out, List<String> res) {
		//非法情况
		if(left < 0 || right < 0 || right > left) return;
		
		//合法,保存结果
		if(left == 0 && right == 0) {
			res.add(out);
			return;
		}
		//递归
		helper(left - 1, right, out + "(", res);
		helper(left, right - 1, out + ")", res);
	}
	
	public static void main(String[] args) {
		List<String> result = generateParentheses(3);
		System.out.println(result);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值