题 目:
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
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
思 路:
如题目可见,假如,n=0,那么BST(0)=1,只有空集一种情况,而当n=1时,集合也只有一个元素,一种情况,BST(1)=1.当n=2时,BST(2)=BST(0)*BST(1)(1为根的时候)+BST(1)*BST(0)(2为根的时候)=2。当n=3时,集合为3个元素,BST(3)=BST(0)*BST(2)(根为1时)+BST(1)*BST(1)(根为2时)+BST(2)*BST(0)(根为3时)=5。当n=4时,BST(4)=BST(0)*BST(3)(根为1时)+BST(1)*BST(2)(根为2时)+BST(2)*BST(1)(根为3时)+BST(3)*BST(0)(根为4时)。所以,由此观察,可以得出BST的递推公式为BST[i] = ∑BST[0...k] * [i-1-k] k取值范围 0<= k <=(i-1)。
class Solution:
def numTrees(self,n):
BST={}
BST[0]=1
BST[1]=1
for i in range(2,n+1):
BST[i]=0
for k in range(0,i):
BST[i]+=BST[k]*BST[i-1-k]
return BST[n]
def numTrees(self,n):
BST={}
BST[0]=1
BST[1]=1
for i in range(2,n+1):
BST[i]=0
for k in range(0,i):
BST[i]+=BST[k]*BST[i-1-k]
return BST[n]