leetcode-22:括号生成

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

示例:

输入:n = 3
输出:[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]

解:
回溯(深度优先遍历)

    public List generateParenthesis(int n) {
        List result = new ArrayList<>();
        if(n < 0){
            return result;
        }
        dfs("", n, n, result);
        return result;
    }

    public void dfs(String str, int left, int right, List result){
        //左右括号都用完,就可以放入结果集了
        if(left == 0 && right == 0){
            result.add(str);
            return;
        }
        //应该是左括号小于等于右括号才能是有效的括号
        if(left > right){
            return;
        }
        //如果有左括号,优先使用左括号
        if(left > 0){
            dfs(str + "(", left - 1, right, result);
        }
        if(right > 0){
            dfs(str + ")", left, right - 1, result);
        }
        return;
    }
dfs

你可能感兴趣的:(leetcode-22:括号生成)