[leetCode]面试题 08.09. 括号

在这里插入图片描述

class Solution {
    public List<String> generateParenthesis(int n) {
        List<String> ans = new LinkedList<>();
        backtrack(ans, n, 0, "");
        return ans;
    }

    // 回溯: left表示可以使用的左括号数,right表示可以使用的右括号数
    private void backtrack(List<String> ans, int left, int right, String track) {
        if (left == 0 && right == 0) ans.add(track);
        else {
            // 使用一个左括号,同时使右括号数+1,避免生成无效括号
            if (left > 0) backtrack(ans, left - 1, right + 1, track + '(');
            // 可以使用的右括号数大于0,用来补齐原来的左括号
            if (right > 0) backtrack(ans, left, right - 1, track + ')');
        }
    }
}
posted @ 2020-10-06 09:31  消灭猕猴桃  阅读(67)  评论(0编辑  收藏  举报