Generate Parentheses

来源:互联网 发布:多益网络校招java面试 编辑:程序博客网 时间:2024/06/04 19:05

原题:

即给定一个整数n,返回n对小括号排列的所有情况,结果存储在List<String>里。


思考过程:

独立思考未果,借鉴一下别人的思路,发现这道题要用递归。还看见有人把它和二叉树联系在了一起,豁然开朗,大受启发。原博客地址:点击打开链接。一开始仿照原博客将结果存在Vector里,结果leetCode不承认这个类。


解题思路:

参见原博客画的二叉树。递归函数要传递:左右括号的个数、结果集、当前字符串。每次递归进行判断,左括号、右括号是否都有n个,如果是,将结果添加到结果集;继续判断左括号个数是否到了n个,如果不是,当前字符串末尾加上“(”,左括号数加一,继续遍历;继续判断右括号数是否小于左括号,如果是,当前字符串末尾加“)”,右括号数加一,继续遍历。以此类推。


结果代码:

public List<String> generateParenthesis(int n) {        List<String> res = new ArrayList<>();        recursive(n,n,"",res);        return res;    }    public void recursive(int l,int r,String s,List<String> res){        if ((l == 0) && (r == 0)) res.add(s);//让l和r递减的形式,省得为了控制而传递参数n        if (l > 0) recursive(l - 1,r,s + "(",res);        if (l < r) recursive(l,r - 1,s + ")",res);    }
可以说写得及其精简。

原创粉丝点击