408算法题leetcode--第36天
96. 不同的二叉搜索树
题目地址:96. 不同的二叉搜索树 - 力扣(LeetCode)
题解思路:dp
时间复杂度:O(n^2)
空间复杂度:O(n)
代码:
class Solution {
public:
int numTrees(int n) {
// dp[]: i个节点的二叉搜索树个数
// 转移:dp[i] = dp[j - 1] * dp[i - j],即左*右
// 初始化:dp[0] = 1
// 顺序:小到大
vector<int>dp(n + 1, 0);
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];
}
}
// output
for(auto it : dp){
cout << it << ' ';
}
return dp[n];
}
};