每天一题LeetCode【第19天】

T22. Generate Parentheses【Medium

题目

给定 n 对圆括号,写一个函数来生成正确形式的括号的所有组合。

例如,给出 n=3 ,一个解集是:

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

思路

这个代码的思路很简单,就是分类讨论的感觉,正确的括号组合满足下列两个条件:
的数量一定小于max

的数量小于等于 的数量

设( 的数量为 open,)的数量为 close ,

当 open < max 且 close = open时 后面只能加 (, 例如 str="()" 时

当 open < max 且 close < open时 后面既能加 ( 也能加 ),例如 str="()(" 时

代码

代码取自 Top Solution,稍作注释

public List generateParenthesis(int n) {
        List list = new ArrayList();
        backtrack(list, "", 0, 0, n);
        return list;
    }
    
    public void backtrack(List list, String str, int open, int close, int max){
        //若长度达到 max*2 说明完整了,加入到 list 里面
        if(str.length() == max*2){
            list.add(str);
            return;
        }
        //当 open

补充

这里方法中传参 list 传递了 list 的地址,两个 list 指向同一块区域,所以改了任意一个,另一个也会改~

想具体了解一下 java 参数传递,我看了这个 blog: http://blog.sina.com.cn/s/blog_4b622a8e0100c1bo.html

你可能感兴趣的:(每天一题LeetCode【第19天】)