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:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
class Solution {
public void handler(List<String> lst, StringBuilder str, int l, int r, int n){
if (str.length() == 2*n){
lst.add(new String(str));
return;
}
if (l < n){
str.append('(');
handler(lst, str, l+1, r, n);
str.deleteCharAt(str.length() - 1);
}
if (l > r){
str.append(')');
handler(lst, str, l, r+1, n);
str.deleteCharAt(str.length() - 1);
}
}
public List<String> generateParenthesis(int n) {
List<String> lst = new ArrayList<>();
StringBuilder str = new StringBuilder();
handler(lst, str, 0, 0, n);
return lst;
}
}