力扣:括号生成问题

该博客探讨了如何利用动态规划解决力扣(LeetCode)中的括号生成问题。当给定括号对数n时,需要找出所有有效括号的组合。举例来说,n=3时,有效组合包括"((()))"、"(()())"等。作者提到最初考虑使用全排列但转而研究官方动态规划解决方案,虽然未能完全理解,但也了解到二进制解法,通过0-1表示左右括号,并利用值域【101010,111000】来判断括号组合的合法性。
摘要由CSDN通过智能技术生成

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

例如,给出 n = 3,生成结果为:

[  "((()))",  "(()())",  "(())()",  "()(())",  "()()()"]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses


 

 大致思路

 以前接触过类似的题目,第一想法就是全排列里面进行删减选择,stl里面也正好有函数可以用。
 

class Solution {
    public:
	vector<string> generateParenthesis(int n)
	{
        int x=n;
		vector<string> res;
		int* arr = new int[x * 2];
		for (int i = 0; i < 2 * x; ++i)
		{
			if (i % 2 == 0)
				arr[i] = 1;
			else
				arr[i] = -1;
		}
		do
		{
			bool flag = true;
			int sum = 0;
			for (int i = 0; i < 2 * x && flag; ++i)
			{
				sum += arr[i];
				if (sum < 0)
					
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值