题目:96. 不同的二叉搜索树 - 力扣(LeetCode)
题解
通过以上推导,得到一个最终递推公式。则这道题就可以转换为类似斐波那契问题的动态规划问题啦~
代码
class Solution {
public:
int numTrees(int n) {
vector<int> dp(n + 1);
// 初始化
dp[0] = 1;
dp[1] = 1;
for(int i = 2; i <= n; i++)
{
for(int j = 0; j < i; j++)
{
dp[i] += dp[j] * dp[i - j - 1];
}
}
return dp[n];
}
};
注意:dp[0]的初始化值为1,根据实际情况分析,比如当以第一个元素为根节点f(1) = G(0) * G(n-1) = G(n-1),所以G(0)应该取值为1。