[LeetCode]Generate Parentheses
题目描述:给定一个数字n,需要返回包含所有正确格式的括号组合,即字符串需要包含n个左括号和右括号,且括号的开闭需要成对组合。比如:n=2,()()和(())都是符合的,但是))((就是不符合的
题目思路:类似于DFS(深度优先查询),参数有:left(剩余可用的左括号),right(剩余可用的右括号),lastString(上次递归生成的字符串)。关键在于right > 0 && right > left 这个条件,需要确保剩余右括号的数量要大于左括号才可添加右括号。
代码:
class Solution {
private final List<String> result = new ArrayList<>();
public List<String> generateParenthesis(int n) {
handleParenthesis(n, n, new StringBuilder());
return result;
}
private void handleParenthesis(int left, int right, StringBuilder lastString) {
if (left == 0 && right == 0) {
result.add(lastString.toString());
return;
}
StringBuilder copyOfLastString = new StringBuilder(lastString.toString());
if (left > 0) {
handleParenthesis(left - 1, right, lastString.append("("));
}
if (right > 0 && right > left) {
handleParenthesis(left, right - 1, copyOfLastString.append(")"));
}
}
}0