您的位置:首页 > 其它

22. Generate Parentheses

2018-02-17 16:55 267 查看
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:[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
思路:这道题要生成正确形式的括号匹配的数量,其实就是卡特兰数,这里就不详说了。至于要输出所有括号的正确组合形式,可以采用递归。用两个变量l和r记录剩余左括号和右括号的数量,当且仅当左右括号数量都为0时,正常结束。当然还有一点限制,就是剩余的右括号数量比左括号多时才能添加右括号。
代码1:
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
addingpar(res, "", n, 0);
return res;
}
void addingpar(vector<string> &v, string str, int n, int m){
if(n==0 && m==0) {
v.push_back(str);
return;
}
if(m > 0){ addingpar(v, str+")", n, m-1); }
if(n > 0){ addingpar(v, str+"(", n-1, m+1); }
}
};


代码2:
class Solution {
private:
void generateParenthesis(vector<string> &v, string s, int l, int r){// l和r记录剩余左右括号的数量
if(l == 0 && r == 0) // 当且仅当左右括号数量都为0时,正常结束
v.push_back(s);
if(l > 0)
generateParenthesis(v, s + "(", l - 1, r);
if(r > 0 && l < r) // 剩余的右括号数量比左括号多时才能添加右括号
generateParenthesis(v, s + ")", l, r - 1);
}
public:
vector<string> generateParenthesis(int n)
{
vector<string> v;
generateParenthesis(v, "", n, n);
return v;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: