题目链接:
题目描述:
给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;
}
};