1. dp数组的含义
下标:表示 整数 i
值:表示整数 0 - i 可以组成多少种二叉树
2. 递推公式
。。解释不太清,大概意思上就是,可以由n = 1 和 n = 2 推导出 n = 3 的情况
dp [ i ] += dp[ j - 1 ] + dp [ i - j ]
j - 1 : 表示的是 以 j 为根结点的 左子树 一共有多少种
i - j : 表示的是 以 j 为根结点的 右子树 一共有多少种
3. 初始化
dp [ 0 ] = 1 把 空树 也当作时一种二叉搜索树
4. 遍历顺序,从小到大
class Solution {
public:
int numTrees(int n) {
vector<int> dp(n + 1);
dp[0] = 1;
for(int i = 1 ; i <= n ;i++)
{
for(int j = 1 ; j <= i; j++)
dp[i] += dp[ j - 1] * dp[i - j];
}
return dp[n];
}
};