【LeetCode】96. 不同的二叉搜索树 DP

不同的二叉搜索树

题目描述

题目链接:96. 不同的二叉搜索树

解题思路

动态规划。看的官方题解
如果是直接想动态转移方程的话不太容易,但是像题解里面推出式子来就比较好理解了。

  1. 定义两个函数:
    G(n): 长度为 n 的序列能构成的不同二叉搜索树的个数。
    F(i, n): 以 i 为根、序列长度为 n 的不同二叉搜索树个数(1≤i≤n)。
  2. 在这里插入图片描述
  3. 在这里插入图片描述
  4. 在这里插入图片描述

代码

class Solution {
public:
    int numTrees(int n) {
        vector<int> dp(n+1,0);
        dp[0]=1;dp[1]=1;//dp[0]=1
        for(int i=2;i<n+1;i++)
            for(int j=1;j<=i;j++)//<=,即i=j时,dp[0]=1,即右子树为空时
                dp[i]+=dp[j-1]*dp[i-j];
        return dp[n];
    }
};
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页