且未

博客园 首页 新随笔 联系 订阅 管理

题目

题意:给你一个数字n,问你将1~n这n个数字,可以组成多少棵不同的二叉搜索树。

1,2,5,14……根据输出中的规律可以看出这是一个卡特兰数的序列。于是代用卡特兰数中的一个递推式:

因为输入可取到100,用无符号位计算最高可计算33个卡特兰数,所以可以用java中的大数

import java.math.BigInteger;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        BigInteger[] ans = new BigInteger[105];
        ans[0] = BigInteger.valueOf(1);
        for (int i = 1; i <= 100; ++i) {
            ans[i] = ans[i - 1].multiply(BigInteger.valueOf(4 * i - 2)).divide(BigInteger.valueOf(i + 1));
        }
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int n = in.nextInt();
            System.out.println(ans[n]);
        }
        in.close();
    }
}

 

posted on 2018-09-09 19:49  阿聊  阅读(142)  评论(0编辑  收藏  举报