leetcode Generate Parentheses

来源:互联网 发布:中国最良心的网游知乎 编辑:程序博客网 时间:2024/06/07 05:03

题目链接

思路:
这个题目其实看了别人的代码。当然只是匆匆扫了一眼,并没有看仔细。

其实包含的思想是有剪枝的穷尽
我们可以定义两个变量一个记录还有多少个(另一个变量记录还有多少个)

那么,下面的递归就是穷尽所有的可能

help(prev+"(", open-1, close);help(prev+")",open,close-1);

当open==close==0时。代表所有的()都用完了,需要添加到结果里面。
需要剪枝的情况
1open 和close为负数。
2close的数目小于open。。这时候产生的结果可能是这样())等等,因为)的数量必须必(小。

思考为啥open小于close就可以呢?因为这是代表(的数量多于),只要在接下来的递归产生)进行配对就好。。

public class Solution {  List<String> result=new LinkedList<String>();    public List<String> generateParenthesis(int n) {        help("", n, n);        return result;    }    public void help(String prev,int open,int close)    {        if(open<0||close<0||close<open)        {            return;        }        if(open==0&&close==0)        {            result.add(prev);        }        help(prev+"(", open-1, close);        help(prev+")",open,close-1);    }}
0 0