Given n, how many structurally unique BST's (binary search trees) that store values 1 ... n?
Example:
Input: 3
Output: 5
Explanation:
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
class Solution:
def numTrees(self, n):
"""
:type n: int
:rtype: int
"""
res = [0 for i in range(n+1)]
res[0] = res[1] = 1
for i in range(2,n+1):
for j in range(i):
res[i] += res[j]*res[i-j-1]
return res[n]
卡罗兰公式
记G(n)为长度为n的数的个数,F(i,n)为以i为顶点,总顶点数为n的情况下解的个数.
则G(n) = F(1,n)+F(2,n)+...+F(n,n)
而 F(i,n)=G(i-1)*G(n-i) 1<=i<=n(由二叉搜索树的性质得出)
故
G(n) = G(0) * G(n-1) + G(1) * G(n-2) + … + G(n-1) * G(0)
参考自: https://blog.csdn.net/u012501459/article/details/46622501