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.
题目要求出n个节点的BST树有多少种结构组合,由于是BST树,那么可以知道,同一种“样子”的BST树一定只有一种,意思是节点的值只有一种排列方式,那么问题就简化了,我们可以不用关心node里面的值,只需要关心有node有多少种组合方式
方案1:使用递归来解题,超时了,不能这么做
func numTrees(n int) int {
if n == 0 {
return 1
}
numSlice :=make([]int,n + 1)
numSlice[0] = 1;
for i := 1; i <= n; i++ {
for j := 0; j < i; j++ {
numSlice[i] += numSlice[j] * numSlice[i - j - 1]
}
}
return numSlice[n]
}
方案二:不使用递归,用numSlice来存储结果,例如numSlice[3] = 5,表示n=3时有5种排列,思路和递归比较类似
func numTrees(n int) int {
if n == 0 {
return 1
}
numSlice :=make([]int,n + 1)
numSlice[0] = 1;
for i := 1; i <= n; i++ {
for j := 0; j < i; j++ {
numSlice[i] += numSlice[j] * numSlice[i - j - 1]
}
}
return numSlice[n]
}