您的位置:首页 > 其它

卡特兰公式的应用

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;

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: