码迷,mamicode.com
首页 > 其他好文 > 详细

22. Generate Parentheses生成指定个括号

时间:2018-01-08 23:02:27      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:条件   string   null   int   生成   tco   比较   就是   new   

生成指定个数的括号,这些括号可以相互包括,但是一对括号的格式不能乱(就是配对的一个括号的左括号要在左边,右括号要在右边)

思维就是从头递归的添加,弄清楚什么时候要添加左括号,什么时候添加右括号

有点像二叉树的建立过程

/*
    思路是从第一个符号开始添加,只有两种情况,一种是添加左括号,一种是添加右括号
    判断好两种添加的条件后向后添加就行:
    1.当左边括号不超过括号数n时可以添加左括号
    2.当右括号不超过左括号时可以添加右括号
    用递归依次向下添加就行
    由于这种数据结构比较像二叉树,代码使用二叉树写的,其实完全不需要用二叉树。
     */
    //这里不能写public,要不LeetCode不给通过
    class TreeNode {
        public StringBuilder val;
        public TreeNode left;
        public TreeNode right;
        public TreeNode(StringBuilder str) { val = str; }
    }
    List<String> res = new ArrayList<>();
    public List<String> generateParenthesis(int n) {
        if (n < 1)
            return new ArrayList<>();
        StringBuilder s = new StringBuilder("(");
        TreeNode tree = new TreeNode(s);
        helper(tree,n*2);
        return res;
    }
    public TreeNode helper(TreeNode tree,int n)
    {
        //判断是不是添加完了
        StringBuilder temp = tree.val;
        if (temp.length()>=n)
        {
            res.add(new String(temp));
            return null;
        }
        //统计左右括号数
        int l = 0;
        int r = 0;
        for (int i = 0; i < temp.length(); i++) {
            if (temp.charAt(i)==‘(‘)
                l++;
            if (temp.charAt(i)==‘)‘)
                r++;
        }
        //注意这里一定要新建,如果把temp直接赋给left和right的话,他们三个其实是指向同一个堆内存
        StringBuilder left = new StringBuilder(temp);
        StringBuilder right = new StringBuilder(temp);
        left.append(‘(‘);
        right.append(‘)‘);
        //添加条件
        if (r < l)
        {
            tree.right = helper(new TreeNode(right),n);

        }
        if (l < n/2)
        {
            tree.left = helper(new TreeNode(left),n);
        }
        return tree;
    }

 

22. Generate Parentheses生成指定个括号

标签:条件   string   null   int   生成   tco   比较   就是   new   

原文地址:https://www.cnblogs.com/stAr-1/p/8245351.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!