题目链接:
题目描述:
给n对括号,求所有的合法括号组合。
For example, given n = 3, a solution set is:
“((()))”, “(()())”, “(())()”, “()(())”, “()()()”
题目分析:
参考博客,写得非常详细,我开始并没有想到和树有关系。
可以把这道题转化成二叉树的形式来表示
(
/ \
(( ()
/ \
((( (() / \ (()( (()) / (())( \ (())()
左分支添加左括号,右分支添加右括号。
当左括号==n 右括号==n,表示找到一个。
右分支的括号小于等于左分支的括号,所以当左括号个数>右括号个数时,才能添加右括号。
代码:
class Solution {
public:
vector<string> result;
void generateParenthesis(string s,int left,int right,int n){
if(left==n && right==n){
result.push_back(s);
return;
}
if(left<=n){
generateParenthesis(s+"(",left+1,right);
}
if(left>right){
generateParenthesis(s+")",left,right+1);
}
}
vector<string> generateParenthesis(int n) {
generateParenthesis("",0,0,n);
return result;
}
};

本文详细解析了如何通过将生成合法括号组合的问题转化为二叉树形式来解决,提供了代码实现及解析过程,适用于理解递归算法在解决组合问题的应用。
791

被折叠的 条评论
为什么被折叠?



