Unique Binary Search Trees -LeetCode
题目:
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
分析:
首先解释一下
BST's (binary search trees),也就是二叉搜索树的意思。
二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉搜索树。
如果不是很理解的话,请结合题目中所给的例子,感觉还是很好理解的。
这道题对我这种算法渣真是很难,一开始想了很多办法都是不行,后来一查发现有公式,呵呵。。。
令f(0) = 1
f(1) = f(0)*f(0)
f(2) = f(1)*f(0) + f(0)*f(1)
f(3) = f(2)*f(0) + f(1)*f(1) + f(0)*f(2)
……
f(n) = f(n-1)*f(0) + f(n-2)*f(1) +……f(0)*f(n-1)
f(1) = f(0)*f(0)
f(2) = f(1)*f(0) + f(0)*f(1)
f(3) = f(2)*f(0) + f(1)*f(1) + f(0)*f(2)
……
f(n) = f(n-1)*f(0) + f(n-2)*f(1) +……f(0)*f(n-1)
这个是
二叉搜索树的定理,也就是不需要自己证明,可以直接拿来用,如果感兴趣的可以去研究一下证明。
代码:
class Solution:
# @return an integer
def numTrees(self, n):
c =1
for i in range(2,n+1):
c = 2*(2*i-1)*c/(i+1)
return c
好吧,代码就是这么简单,我真是越来越崇拜发明算法的科学家们了。