给你一个整数 n
,求恰由 n
个节点组成且节点值从 1
到 n
互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
示例 1:
输入:n = 3 输出:5
解题思路:
动态规划,就是需要思考状态转移方程。还有一个叫卡塔兰数的,需要通过推导找出规律
class Solution:
def numTrees(self, n: int) -> int:
dp = [0] * (n+1)
dp[0] = 1
dp[1] = 1
# g = Σf(i,n)
# f(i,n) = g(i-1)*g(n-i)
#g = Σg(i-1)*g(n-i)
for i in range(2,n+1):
for j in range(1,i+1):
dp[i] = dp[i] + dp[j-1]*dp[i-j]
return dp[n]