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:
"((()))", "(()())", "(())()", "()(())", "()()()"
recursion, when left parentheses number smaller than n, add it. when right parentheses smaller than left, add it
Java
public class GenerateParentheses {
ArrayList<String> res;
StringBuffer pare;
public List<String> generateParenthesis(int n) {
res = new ArrayList<>();
pare = new StringBuffer();
parenethesis(n, 0, 0, 0);
return res;
}
public void parenethesis(int n, int leftNum, int rightNum, int level){
if(2*n == level){
res.add(pare.toString());
return;
}
if(leftNum<n){
pare.append('(');
parenethesis(n, leftNum+1, rightNum, level+1);
pare.deleteCharAt(level);
}
if(rightNum<leftNum){
pare.append(')');
parenethesis(n, leftNum, rightNum+1, level+1);
pare.deleteCharAt(level);
}
}
}
c++
void CombinationPar(vector<string>& result, string& sample, int deep,
int n, int leftNum, int rightNum)
{
if(deep == 2*n)
{
result.push_back(sample);
return; }
if(leftNum<n)
{
sample.push_back('(');
CombinationPar(result, sample, deep+1, n, leftNum+1, rightNum);
sample.resize(sample.size()-1);
}
if(rightNum<leftNum)
{
sample.push_back(')');
CombinationPar(result, sample, deep+1, n, leftNum, rightNum+1);
sample.resize(sample.size()-1);
}
}
vector<string> generateParenthesis(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<string> result;
string sample;
if(n!= 0)
CombinationPar(result, sample, 0, n, 0, 0);
return result;
}