Generate Parentheses

来源:互联网 发布:java开发年终总结范文 编辑:程序博客网 时间:2024/05/23 17:51

好久没写博客,前几天和Cindy_niu 聊了一下,发现自己确实懒惰了,刚好她那里很多题目,我也抄一份来做做,本来想从第一篇开始更起,但是看到文章很多,十天半个月追不上最新版,还是倒叙吧~

题目:点击打开链接

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

For example, given n = 3, a solution set is:

"((()))", "(()())", "(())()", "()(())", "()()()"

重新整理一下,题目的要求是给出n值,算出全部可能的排列,并列出来,

n<0 无效

n=0时 组合为空

n=1时 () 组合数P为1,这里我们规定组合数为可列出的总数

n=2时 最外面的两个括号是( ~ ) 中间可以是(),也可以是)( 组合数P为2

.....

n=k时 假设 有组合数为 P 其中,输出解决方案 SolutionK[P];

n=k+1时 最外面两个括号必然是(~),分情况讨论

1、如果第二个括号是(,那么倒数第二个必然是),这就是n=k的情况

2、如果第二个是),倒数第二个必然是( ,那么去头去尾,这就是n=k-1的情况

此时,Solution(K+1)[P]就是“(”+SolutionK[P]+“)”和“()”+Solution(K-1)[P]+“()”的数组合并了,复制过来,加头加尾就行了


java递归实现

public String[] GenParenttheses(int n)throws UnsupportedOperationException{if(n<=0)throw new UnsupportedOperationException("unsupport exception");if( n == 1){String[] res=new String[] {"()"};return res;}else{String[] p= {"()" , ")("};String[] res =Gen(p,n-1);for(int i=0;i<res.length;i++){res[i] = left + res[i]+ right;  }return res;}}private static String left = "(";private static String right =")";private String[] Gen(String[] p,int n){if(n >1){p = Gen(p,n-1);String[] np = new String[2*p.length];for(int i=0;i<p.length;i++){np[2*i] = left+p[i]+right;np[2*i+1] = right+p[i]+left;}return np;}return p;}





0 0
原创粉丝点击