解答
java
class Solution {
public List<String> generateParenthesis(int n) {
List<String> results = new ArrayList<>();
StringBuilder sb = new StringBuilder();
generateParenthesis(n, n, sb, results);
return results;
}
void generateParenthesis(int left, int right, StringBuilder sb,
List<String> results) {
if (left == 0 && right == 0) {
results.add(sb.toString());
return;
}
if (left > 0) {
sb.append("(");
generateParenthesis(left - 1, right, sb, results);
sb.deleteCharAt(sb.length() - 1);
}
if (left < right && right > 0) {
sb.append(")");
generateParenthesis(left, right - 1, sb, results);
sb.deleteCharAt(sb.length() - 1);
}
}
}
总结
回溯法。
注意左括号在前,右括号在后,即左括号的数量要小于右括号的数量。