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:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
方法:递归
在所有的括号组合中,合法的组合满足如下条件:
1.左括号与右括号的数量不能超过n.
2.每放一个左括号,才能放一个右括号,即右括号不能先于左括号放置。
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> result;
generate("",n,n, result);
return result;
}
private:
void generate(string item, int left, int right, vector<string>& result)
{
if(left==0 && right==0)
{
result.push_back(item);
return ;
}
if(left > 0)
generate(item + "(", left-1, right, result);
if(left < right)
generate(item + ")", left, right-1, result);
}
};