leetcode22. Generate Parentheses 栈和dfs的运用

本文介绍了一种使用深度优先搜索(DFS)生成有效括号组合的算法。通过递归地添加左括号和右括号,并利用栈来跟踪当前状态,确保了生成的所有字符串都是合法的。文章详细展示了如何避免无效的括号组合,并通过具体实现说明了整个过程。

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

k代表 ”(“ 的数量

如果字符串长度等于2n且栈为空,则增加一个答案

如果"("的数量大于n或者字符串长度大于2n,则退出

接着就是dfs过程

先放'('

dfs

然后拿出'('


接着若栈顶满足条件,则放")"

然后dfs


void dfs(stack<char> str_stack,string str,int k,vector<string> &ans,int n)
{
	string str_temp=str;
	if(str.size()==2*n && str_stack.empty())
	{
		ans.push_back(str);
		return ;
	}
	if(k>n||str.size()>2*n)
		return ;

	//选用(
	str+='(';
	str_stack.push('(');
	dfs(str_stack,str,k+1,ans,n);
	
	//取消'(',变回去
	str=str_temp;
	str_stack.pop();

	//若栈顶是(,选用)
	if(!str_stack.empty()&&str_stack.top()=='(')
	{
		str+=')';
		str_stack.pop();
		dfs(str_stack,str,k,ans,n);
	}
}

vector<string> generateParenthesis(int n) 
{
	string str="";
	stack<char> str_stack;
	vector<string> ans;
	dfs(str_stack,str,0,ans,n);
	return ans;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值