给定n对括号,写一个方法生成所有格式正确的括号组合。
例如,给定 n = 3,结果集如下:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
括号组合有两部分组成,右边i个括号的全部组合,左边是n-i-1个括号组合再在外面加一对括号。
private static final List[] CACHE = new List[] { new ArrayList(),
Arrays.asList("()"), Arrays.asList("(())", "()()"),
Arrays.asList("((()))", "(()())", "(())()", "()(())", "()()()") };
public static List generateParenthesis(int n) {
if (n <= 0) {
return new ArrayList();
}
if (n > 0 && n <= 3) {
return CACHE[n];
}
List result = new ArrayList();
for (int i = 0; i < n; i++) {
List right = generateParenthesis(i);
List left = generateParenthesis(n - i - 1);
if (right.isEmpty()) {
for (String l : left) {
result.add("(" + l + ")");
}
} else {
if (left.isEmpty()) {
for (String r : right) {
result.add("()" + r);
}
} else {
for (String l : left) {
for (String r : right) {
result.add("(" + l + ")" + r);
}
}
}
}
}
return result;
}