import java.util.*;
/**
* 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:
*
* "((()))", "(()())", "(())()", "()(())", "()()()"
*
* Tags: Backtracking. String
*/
class GenerateParen {
public static void main(String[] args) {
}
/**
* Backtracking
* Helper function use left and right to represent available parentheses
* Initialize left as n, right as 0
*/
public List<String> generateParenthesis(int n) {
List<String> ans = new ArrayList<String>();
if (n <= 0) return ans;
dfs(n, 0, "", ans);
return ans;
}
/**
* @param left available left parentheses
* @param right available right parentheses
* @param res current result
* @param ans the answer list of the problem
*/
public void dfs(int left, int right, String res, List<String> ans) {
if (left == 0 && right == 0) {
ans.add(res);
return;
}
if (left > 0) dfs(left - 1, right + 1, res + "(", ans); // add (, right + 1
if (right > 0) dfs(left, right - 1, res + ")", ans); // add ), right - 1
}
}