地址:https://leetcode.com/problems/unique-binary-search-trees/
题目:
Given n n n, how many structurally unique BST’s (binary search trees) that store values 1... n 1 ... n 1...n?
Example:
理解:
就是要求n个数的二叉排序树的个数。
可以考虑,每个结点都可以作为树的根结点。然后其可以组成的二叉排序树的个数就是1
-i-1
在其左边可以构成的数目,乘以i+1
-n
在右边构成的数目。因此一开始的想法就是递归的求解这个问题。但是这样会超时
递归实现:
class Solution {
public:
int numTrees(int n) {
if (n == 0 || n == 1) return 1;
else {
int res = 0;
for (int i = 1; i <= n; ++i) {
res += (numTrees(i - 1) * numTrees(n - i));
}
return res;
}
}
};
非递归实现:
可以把上面的递归形式改成使用dp的形式
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 = 1; j <= i; ++j) {
dp[i] += dp[j - 1] * dp[i - j];
}
}
return dp.back();
}
};