96. 不同的二叉搜索树 中等
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
示例 1:
输入:n = 3
输出:5
示例 2:
输入:n = 1
输出:1
提示:
- 1 <= n <= 19
代码参考:
package main
import "fmt"
func main() {
fmt.Println(numTrees(3)) // 5
}
// 有点类似斐波那契数列的味道
// 1 -> 1
// 2 -> 2
// 3 -> 1*2 + 1*1 + 2*1 = 5
// 4 -> 1*5 + 2*2 + 5*1 = 14
// ...
func numTrees(n int) int {
dp := make([]int, n+1)
dp[0], dp[1] = 1, 1
for i := 2; i <= n; i++ {
for j := 0; j < i; j++ {
dp[i] += dp[j] * dp[i-j-1] // -1 是剔除本体 // 以 i 为根节点的 BST 数 = 两侧子 BST 数乘积
}
}
return dp[n]
}
最后编辑: kuteng 文档更新时间: 2021-06-05 10:16 作者:kuteng