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);
}
};