您的位置:首页 > 其它

[LeetCode]-Generate Parentheses N个括号所有的组合数

2014-08-15 15:31 435 查看


Generate Parentheses

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:

"((()))", "(()())", "(())()", "()(())", "()()()"


括号匹配的问题需要用到递归,想到DFS。但是如果总是从“成对”括号入手,就会想到“栈”等东西,问题就复杂了。如果将左右括号分开来看:当左括号<n时,就能放置新的左括号。当右括号<左括号数时就能放置新的右括号。那么问题就很容易解决了。

class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> ret;
if(n>0)
DFS(n,"",0,0,ret);
return ret;
}
private:
//l表示左括号出现的次数,r表示右括号出现的次数
void DFS(int n,string s,int l,int r,vector<string> &ret){
if(l==n){
ret.push_back(s.append(n-r,')'));
return;
}
DFS(n,s+'(',l+1,r,ret);
if(r<l)DFS(n,s+')',l,r+1,ret);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: