[LeetCode]Generate Parentheses

发表于
2

题目传送门

题目描述:给定一个数字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