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组圆括号的组合输出,用递归解决。每放一个左括号时右括号可放的位置就多一个,优先放满左括号。代码如下:
class Solution {
public:
void dfs(int L, int R, vector<string>& st, string s){
if(L == 0 && R == 0){
st.push_back(s);
return;
}
if(L){
dfs(L - 1, R + 1, st, s + "(");
}
if(R){
dfs(L, R - 1, st, s + ")" );
}
}
vector<string> generateParenthesis(int n) {
vector<string> st;
if(n < 0)return st;
string s;
st.clear();
dfs(n, 0, st, s);
return st;
}
};