LeetCode Generate Parentheses (DFS)

题意

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
输出N对括号的所有组合。

解法

比较明显的深搜,主要保存两个变量,一个left用来记录已经安放的左括号的数量,相当于一个栈,还有一个avaliable用来记录剩下还有多少个左括号可以取。当left不为空时,对于每一次新括号的选取,可以新增一个左括号(如果avaliable还没空的话),或者是取一个右括号来和之前的一个左括号匹配。当left为空时,能做的就只有一直取右括号来和前面的左括号匹配。

class Solution
{
public:
    vector<string> generateParenthesis(int n)
    {
	    vector<string>	ans;
	    string	temp;
	    dfs(0,n,0,n,ans,temp);
	    return	ans;
    }

    void	dfs(int left,int avaliable,int length,int n,vector<string> & ans,string temp)
    {
	    if(length == n * 2)
	    {
		    ans.push_back(temp);
		    return	;
	    }

	    if(left)
	    {
		    if(avaliable)
		    {
			    temp += '(';
			    dfs(left + 1,avaliable - 1,length + 1,n,ans,temp);
			    temp.pop_back();
		    }

		    temp += ')';
		    dfs(left - 1,avaliable,length + 1,n,ans,temp);
		    temp.pop_back();
	    }
	    else
		    if(avaliable)
		    {
			    temp += '(';
			    dfs(left + 1,avaliable - 1,length + 1,n,ans,temp);
			    temp.pop_back();
		    }
    }
};
posted @   Decouple  阅读(282)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示