利用动态规划的思想:
class Solution {
public:
int numTrees(int n) {
int *dp = new int[n+1];
dp[0] = 1,dp[1] = 1; // dp[i]表示有n个结点时的个数
for(int i = 2;i <= n;i++){
dp[i] = 0;
for(int j = 1;j <= i;j++){ // j 表示 j 为根节点时
dp[i] += dp[j - 1] * dp[i - j]; // dp[j - 1]左子树的组合个数,dp[i - j]右子树的组合个数
}
}
return dp[n];
}
};```