Leetcode-22: Generate Parentheses

来源:互联网 发布:php调用json接口 编辑:程序博客网 时间:2024/05/27 06:54

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

For example, given n = 3, a solution set is:

[  "((()))",  "(()())",  "(())()",  "()(())",  "()()()"]


思路:这道题类似排列生成算法(permutation generation),由于每次生成的选择只有两种可能(左括号和右括号),我们可以构造一颗深度为2n的二叉树,然后对这颗二叉树进行遍历,这颗二叉树的每个节点为在这此之前做出的选择得到的结果(根节点为空""),每条边为此次的选择('(' 或者 ')'),在去除掉非法的选择(对于任意一次选择,左括号被选择的次数不能小于右括号,且不能超过n)后,最后第2n层的所有叶节点即为选择结果。


public class Solution {    public List<String> res;        public List<String> generateParenthesis(int n) {        res = new LinkedList<>();        StringBuilder str = new StringBuilder("");        generateParenthesis(n, n, str);        return res;    }        private void generateParenthesis(int left, int right, StringBuilder str) {        if (left > right || left < 0 || right < 0) return;        if (left == 0 && right == 0) {            res.add(str.toString());            return;            }        generateParenthesis(left - 1, right, str.append('('));        str.deleteCharAt(str.length() - 1);        generateParenthesis(left, right - 1, str.append(')'));        str.deleteCharAt(str.length() - 1);    }}




原创粉丝点击