【leetcode】【96】Unique Binary Search Trees

来源:互联网 发布:画图软件图标 编辑:程序博客网 时间:2024/06/07 14:57

一、问题描述

Given n, how many structurally unique BST's (binary search trees) that store values 1...n?

For example,
Given n = 3, there are a total of 5 unique BST's.

   1         3     3      2      1    \       /     /      / \      \     3     2     1      1   3      2    /     /       \                 \   2     1         2                 3

二、问题分析

一看到这个题,第一想到的就是n个节点的不同的二叉树有多少种,即采用Catalan公式,该公式的递推表达式为h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2),当n=0或1时,h(n)=1.当然查资料发现它还有其它的形式,比如h(n)=((4*n-2)/(n+1))*h(n-1);以及h(n)=C(2n,n)/(n+1) (n=1,2,3,...),我采用了第一种表达式的解法,比较简单的DP。

三、Java AC代码

public int numTrees(int n) {int[] d = new int[n+1];d[0] = 1;d[1] = 1;for (int i = 2; i <= n; i++) {d[i] = catalan(i, d);}return d[n];}public int catalan(int n,int[] d){int res = 0;int tmp = 0;while(tmp<n){res+= d[tmp]*d[n-1-tmp];tmp++;}return res;}


0 0
原创粉丝点击