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:
"((()))", "(()())", "(())()", "()(())", "()()()"
Have you met this question in a real interview?
思路 : 典型的 dfs 问题, 用 char [] 做buffer 最好
易错点: 添加右括号时候, 注意检查 left >right。 还有最后是 left == right && left == n
public class Solution {
public List<String> generateParenthesis(int n) {
List<String> ret = new ArrayList<String>();
char[] buffer = new char[2 * n];
dfs(n, 0, 0, buffer, ret);
return ret;
}
private void dfs(int n, int left, int right, char[] buffer, List<String> ret){
if(left == right && left == n){//-----
ret.add(new String(buffer));
return;
}
if(left < n){
buffer[left + right] = '(';
dfs(n, left + 1, right, buffer, ret);
}
if(right < n && right < left){//-----
buffer[left + right] = ')';
dfs(n, left, right + 1, buffer, ret);
}
}
}