括号的配对数

package com.java.ly2011.Semptember;

/**
 * x对括号有多少种匹配的情况,例如3对括号有如下5种
 * ()()() ()(())  (())()  (()())  ((()))
 * f(n,m) n为当前可选择的左括号的数目,m为当前可选择右括号的数目
 * 
 *  n=m  f(n,m) = f(n-1 , m)  //取左括号
 *  n<m  f(n,m) = f(n-1 , m)+ f(n, m-1)
 *
 * @author Acer
 *
 */
public class BracketNum {
 
 public static void main(String[] args) {
  
  System.out.println(getRightBracket(3, 3, new StringBuffer()));
  
 }
 
 public static int getRightBracket(int left , int right , StringBuffer path){
  
  if(left>right)
   return 0;
  
  if(left==0&&right==0){
   System.out.println(path);
   return 1;
  }
   
  
  if(left<right){
   int num1 = getRightBracket(left, right-1, path.append(")"));
   path.setLength(path.length()-1);
   
   int num2 =0 ;
   if(left>0){
    num2 = getRightBracket(left-1, right, path.append("("));
    path.setLength(path.length()-1);
   }
   
   return num1+num2;
  }
   
  else{
   int num = 0;
   if(left>0){
    num = getRightBracket(left-1, right, path.append("("));
    path.setLength(path.length()-1);
   }
   return num;
  }
 }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值