题目描述
给你一个整数
n
,求恰由n
个节点组成且节点值从1
到n
互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
示例
输入:n = 3 输出:5
思路:
这道题有点别扭,因为知道是要动态规划来做 ,所以我在写的过程中就先把所有结果展开看了一下,结果在数学上没有看到规律。然后发现,这是一棵二叉搜索树,就是左子树和右子树的排序方法其实是一致的,那么就可以用左子树的个数*右子树的个数;
即并且初始化
因此代码为
class Solution {
public:
int numTrees(int n) {
vector<int> dp(n+1,0);
dp[0]=1;
dp[1]=1;
int i,j;
for(i=2;i<=n;i++)
{
//dp[i]=dp[0]*dp[i-1]+dp[1]*dp[i-1]+..+dp[i-1]*dp[0]
for(j=0;j<i;j++)
{
dp[i]+=dp[j]*dp[i-1-j];
}
}
return dp[n];
}
};