算法练习:括号组合生成

**

题目描述:

**
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

例如,给出 n = 3,生成结果为:

[ “((()))”, “(()())”, “(())()”, “()(())”, “()()()” ]

**

解题思路:

**
比较简单的方法-递归吧
1.输入n之后说明现在有n个左括号和n个右括号可以填
2.最左面一定是左括号,最右面一定是右括号
3.考虑n-1个左右括号时有多少种排列
4.将最左或者最右加上括号

**

解题代码:

**

 public static List<String>  generateParenthesis(int n){
        List<String> list = new ArrayList<String>();
        int left = n;//记录左括号还剩余几个空余地方
        int right = n;//记录右括号剩余几个地方
        dfs(left, right,"",list);
        return list;
    }

    private static void dfs(int left, int right, String s,List<String> list) {
        if(left == 0 && right == 0){
            list.add(s);
            return;
        }
        if(left > 0){
            dfs(left-1, right, s+"(",list);
        }
        if(left<right){
            dfs(left, right-1, s+")",list);
        }
    }

个人收获:

递归是一种很常用的方法,但是他的执行顺序不容易自己设想出来,用程序debug查看或者手画几次执行步骤就很容易看出来啦

发布了71 篇原创文章 · 获赞 14 · 访问量 5611

猜你喜欢

转载自blog.csdn.net/flying_hengfei/article/details/105403524