leetcode-22:括号生成

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

示例:

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

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

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

    public void dfs(String str, int left, int right, List<String> 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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容