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