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;
}
}
}