设为首页 加入收藏

TOP

LeetCode――Generate Parentheses
2015-07-20 18:06:39 来源: 作者: 【 】 浏览:17
Tags:LeetCode Generate Parentheses

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:

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

原题链接:https://oj.leetcode.com/problems/generate-parentheses/

题目:给定n对括号,写一个函数生成所有的构造良好的括号对。

思路:类似这样子的东西在组合数学中有学习到,今天再查了一下,就是卡特琳数。其通项公式为C_n = \frac{1}{n+1}{2n \choose n} = \frac{(2n)!}{(n+1)!n!}。Cn表示所有包含n组括号的合法运算式的个数。

对于计算,可以采用递归的方式。left、right分别代表"("、")"的数目。在每次递归函数中记录左括号和右括号的剩余数量,然后有两种选择,一个是放一个左括号,另一种是放一个右括号。当然有一些否定条件,比如剩余的右括号不能比左括号少,或者左括号右括号数量都要大于0。正常结束条件是左右括号数量都为0。

	public static List
  
    generateParenthesis(int n) {
		List
   
     list = new ArrayList
    
     (); helper(list,"",0,0,n); return list; } public static void helper(List
     
       list,String s,int left,int right,int n){ if(left < right) return; if(left == n && right==n){ list.add(s); return; } if(left == n){ helper(list,s+")",left,right+1,n); return; } helper(list,s+"(",left+1,right,n); helper(list,s+")",left,right+1,n); }
     
    
   
  

reference : http://blog.csdn.net/linhuanmars/article/details/19873463

http://blog.csdn.net/fightforyourdream/article/details/14159435


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 1505 Largest Rectangle in a.. 下一篇UVA 847 - A Multiplication Game..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: