Unique Binary Search Trees
题意
给定一个n,求1-n能够形成不同BST形态的个数。
解法
这题记得是卡特兰数的规律,所以直接上公式就可以。
但是这个用dp思想推导的过程也是很精彩的。
假如我们用f(i,n)表示以i为根节点,n个数字能够形成BST的个数。g(n)表示n个数字能够形成的BST个数。
则g(n) = f(1,n)+f(2,n)+f(3,n)+…..f(n,n)
那么f(i,n)能够怎么推导呢?比如f(3,7),说明以3为根节点,7个数字形成的BST数量,那么左右子树的序列为1-2和4-7,则根据g(n)的定义,左右子树序列能够形成的BST数量为g(2)g(4),也就是说f(3,7)=g(2)\g(4),再抽象成公式就是
f(i,n) = g(i-1)*g(n-i)。
而g(n) = f(1,n)+f(2,n)+…f(n,n)的
所以g(n) = g(0)*g(n-1)+g(1)*g(n-2)+….+g(n-1)*g(0)
,最后输出g(n).
代码
|
|