/*动态规划。参考自:https://github.com/soulmachine/leetcode
设dp[n]表示n个没有重复的数组组成的二叉搜索数的数目。
易知,以某个数字i为根节点的二叉树数目为其左子树数目乘以右子树数目。
所以有dp[n] = sum(dp[i]*dp[n-1-i]),其中(i = 0,1,2...n-1)。*/
class Solution {
public:
int numTrees(int n) {
vector<int> dp(n+1, 0);
dp[0] = dp[1] = 1;
for(int i = 2; i < n+1; ++i){
for(int j = 0; j < i; ++j){
dp[i] += dp[j]*dp[i-1-j];
}
}
return dp[n];
}
};
LeetCode之Unique Binary Search Trees
最新推荐文章于 2019-05-22 11:31:49 发布