• 夕_夕
    2018-12-03
    递归嵌套递归就会蒙圈,过程好难消化,有没有好的方法理解这个递归过程呢
     2
     4
  • coder王
    2018-12-12
    老师能否所有题目有一个java版本的算法解答,题目思路想起来不是很难,难在写出来!
    
     3
  • 往事随风,顺其自然
    2018-11-11
    比如两队括号,按理执行完以后生成了(())之后递归结束了,为什么还会进行递归操作?生成后面的()(),这个还是不理解,第一次递归完成不是return ,程序应该返回值了

    作者回复: 还会继续回到上一层递归调用的函数里,把接下来的语句执行完。第一个括号位相当于一层,每层有两个括号的选择。所以肯定后续 ()() 也会被递归到。

     2
     2
  • linxs
    2018-11-11
    视频中那个樱桃小丸子写的是Java吧 老师口误说错了??

    作者回复: 是 java 的。

    
     2
  • Chouee
    2019-12-02
    越来越觉得递归很有意思,就是有点费🧠
    
     1
  • ..
    2019-03-23
    第三个条件,right<left&&right<n 后面的条件不需要了,因为right<left已经肯定小于n了

    作者回复: 对的,好建议!

    
     1
  • jackbauer
    2019-10-27
    我还是理解不了为什么是2个空格缩进……,我们平时工作都是4个

    作者回复: 在公司里肯定要服从公司的决定。只是现在整个行业里越来越多的公司使用2空格。

    
    
  • cnhjq
    2019-10-03
    规范不在于到底几个空格,而是是否能做到组织内统一,另外,百度也是四空格,百度算大公司么
    
    
  • A_foreign 이호연 w...
    2019-09-03
    这种放和不放的问题应该可以用动态规划解决的吧

    作者回复: 这个题目用 DP 也是可以的。

    
    
  • Jerry银银
    2019-07-30
    老师,这一讲主要讲回溯?递归?剪枝?
    
    
  • QQ怪
    2019-06-28
    在阿里的Java开发手册 一、编程规约(三)代码格式 第5条提到

    【强制】采用4个空格缩进,禁止使用tab字符。
    
    
  • 克里斯
    2019-06-25
    递归方案还是比较容易想到的。这里我卡在如何保存这么多string,如何能递归遍历二叉树。
    
    
  • 克里斯
    2019-06-25
    递归方案还是比较容易想到的。这里我卡在如何保存这么多string,如何能递归遍历二叉树。
    
    
  • nelson
    2019-06-20
    把左括号理解成0,右括号理解成1,按照位操作,每一bit上可以是0或者1,所有的组合就是0-2^2N-1的整数,在这个循环里面,写一个循环,通过修改循环变量,跳过无效的组合,也可以达到修剪的效果,
    
    
  • Terry
    2019-04-04
    学了一点形式语言与自动机,于是就想着用生成的方法来写一个。思路应该和老师说的归纳法类似。

    假设S,T是合法的串,于是有两种生成规则(注意判断长度不能超过n*2):


    1. concat: S + T
    2. expand: '(' + S + ')'

    每轮循环从已有的串中取出串并应用以上两种规则,把生成的新串添加到集合中,直至集合的规模不再增大,算法收敛。

    取出集合中长度为n*2的串作为结果即可。
    提交可以通过,用时200MS+
    这个复杂度不知道怎么分析了。超哥有想法吗?

    ```processing
    public class GenerateParentheses {
        String concat(String s1, String s2) {
            return s1 + s2;
        }
        String expand(String s) {
            return "(" + s + ")";
        }

        HashSet<String> set = new HashSet<>();
        public List<String> generateParenthesis(int n) {
            ArrayList<String> result = new ArrayList<>();
            if (n < 1) return result;
            int cnt = set.size();
            set.add("()");
            while (cnt < set.size()) { // 尚未收敛
                cnt = set.size();
                HashSet<String> frontier = new HashSet<>(); // 此轮新生成的序列
                for (String s1: set) {
                    if (s1.length() < n * 2) frontier.add(expand(s1));
                    for (String s2: set) {
                        if (s1.length() + s2.length() <= n * 2) frontier.add(concat(s1, s2));
                    }
                }
                set.addAll(frontier); // 合并新旧集合。如果有新元素加进来,则会进入下一次循环
            }
            for (String s: set) {
                if (s.length() == n * 2) result.add(s);
            }
            return result;
        }
    }
    ```
    展开

    作者回复: 第一:重复生成的子串比较多;第二,对于由于有重复子串则需要创建和维护一个hashset,且每次进行三判重操作,进一步加大了时间消耗。

    
    
  • 路过蜻蜓
    2019-03-19
    self.list 这个写法就少输入一个参数了,又可以省下来几个单词,写得更精简了,之前也是没有想过可以这样写。至于其它的,right<left 这种也是很少想过,要努力优化代码啊
    
    
  • 夜尽天明
    2019-03-10
    老师平常写代码的时候用什么编辑器?不同的编辑器使用会不会形成不同的代码风格。比如换行与缩进。怎样才能修炼出一种比较优秀的代码风格。

    作者回复: 最新较为受欢迎的是 vs code

    
    
  • yenoumu
    2019-02-18
    覃老师,复杂度用递归树的方法,我觉得是n x 2的2n次方啊。请您帮忙解答下,谢谢!

    作者回复: 2n个盒子里可以放左或者右括号,所以 2^(2n)的复杂度,对吧?

    
    
  • 雷朝建
    2019-01-08
    被left < right的判断惊艳到, 之前根本就没想到这个条件。
    
    
  • 爷爷刘大
    2019-01-06
    关于代码风格的问题,这个不是樱桃小丸子的锅。leetcode或者其他很多ide的默认设置就是遇到循环或者条件的换行自动缩进四空格。

    作者回复: 好的,了解。多谢说明。

    
    
我们在线,来聊聊吧