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对括号,求正确的括号排列的组合。如示例,每个左括号一定在右边有一个右括号与之唯一对应。
思路:
递归的思想。将剩余的左括号数和右括号数记为 l r, 要是l == r ==0 ,说明已经得到了符合要求的string,则压入vector;要是左括号数量不等于0,那么在string中加入一个左括号,再调用该函数递归;要是右括号数量不等于0,并且不大于左括号数量,则在string中加入一个右括号并且递归;如果右括号数目小于左括号数目,则该种情况下是无法形成满足题目的string的。
代码:
class Solution {
public:
void solve(vector<string> &v, string s, int l, int r){
if(r<l) return ;
if(l==0 && r==0) v.push_back(s);
if(l>0) solve(v, s+"(", l-1, r);
if(r>0) solve(v, s+")", l, r-1);
}
vector<string> generateParenthesis(int n) {
vector<string> res;
solve(res, "", n, n);
return res;
}