卡特兰公式的应用
2017-06-06 23:13
162 查看
/*
假设有n对左右括号,请求出合法的排列有多少个?合法是指每一个括号都可以找到与之配对的括号,比如n=1时,()是合法的,但是)(为不合法。
给定一个整数n,请返回所求的合法排列数。保证结果在int范围内。
*/
public class Parenthesis {
/*
使用卡特兰公式:(2*n)!除以n!*n!,再除以(n+1)
注意数的范围,和该公式可以抵消一些数
*/
public int countLegalWays(int n) {
int s1=factorial(2*n,n);
int s2=factorial(n,1);
int stemp=s2*(n+1);
int result=0;
if(s1%stemp==0){
result=s1/stemp;
}else{
result=s1/stemp;
result+=1;
}
return result;
}
//求阶乘n的阶乘
public int factorial(int n,int m){
int result=1;
for(int i=n;i>m;i--){
result*=i;
}
return result;
}
}
假设有n对左右括号,请求出合法的排列有多少个?合法是指每一个括号都可以找到与之配对的括号,比如n=1时,()是合法的,但是)(为不合法。
给定一个整数n,请返回所求的合法排列数。保证结果在int范围内。
*/
public class Parenthesis {
/*
使用卡特兰公式:(2*n)!除以n!*n!,再除以(n+1)
注意数的范围,和该公式可以抵消一些数
*/
public int countLegalWays(int n) {
int s1=factorial(2*n,n);
int s2=factorial(n,1);
int stemp=s2*(n+1);
int result=0;
if(s1%stemp==0){
result=s1/stemp;
}else{
result=s1/stemp;
result+=1;
}
return result;
}
//求阶乘n的阶乘
public int factorial(int n,int m){
int result=1;
for(int i=n;i>m;i--){
result*=i;
}
return result;
}
}
相关文章推荐
- 基于Visual C++2010与windows SDK fo windows7开发windows7平台的tabletpc应用(1)-手写数学公式输入
- ASP.NET中应用Excel:(4)格式和公式
- Excel手工公式、SUM函数、IF函数在评价量规中的应用
- 公式解析 在某些应用中,为了支持灵活性,往往用到自定义的公式。 比如,有如下的原始公式集合:
- uva 107 The Cat in the Hat(公式推导 + log函数的应用)
- 贝叶斯推断公式及其互联网领域的应用详解
- 拆分公式函数及应用
- 公式在Excel报表中的应用
- 公式引擎的在工资软件中的应用
- 紧固件生产中应用的相关计算公式
- 一些常用物理公式和AS3的结合应用(转的)
- [Flex]转来的 Flex 一些常用物理公式和as3的结合应用
- 解析iPhone应用销量趋势的计算公式
- 又一表内公式计算应用实例
- 凌台公式的应用fzu1010
- 中文版Excel 2007公式与函数应用宝典
- Excel数据透视表应用之一表外建公式
- 〔转〕Word域的应用和详解2_等式和公式域
- Simpson公式的应用(HDU 1724/ HDU 1071)
- uva 10499 The Land of Justice(公式应用)