
class Solution {
public:
int numTrees(int n) {
vector<int> dp(n+1); //dp[i]表示节点数为i的不同二叉搜索树的数量
dp[0] = 1;
dp[1] = 1;
for(int i=2;i<=n;i++){
//第二层循环是选择根节点的位置
for(int j=1;j<=i;j++){
dp[i] += dp[j-1]*dp[i-j];//dp[j-1]表示左子树不同二叉搜索树的数量,dp[i-j]表示右子树
}
}
return dp[n];
}
};

3万+

被折叠的 条评论
为什么被折叠?



