96. Unique Binary Search Trees
做题历程:
- 本题做了不止一次了,本次独立解出,大概耗时5分钟
本题第一次做的时候感觉难度很高,但是现在再看,就非常简单了。本题的算法是Dynamic Programming, dp[i]代表当有i个node的时候,可能出现的BST的数量,则可以得出:dp[i] = dp[0] * dp[i-1] + dp[1] * dp[i-2] + ... + dp[i-1] * dp[0],当能得到这个递推公式的时候,就非常简单了。。
代码如下:
class Solution {
public:
int numTrees(int n) {
vector<int> dp(n+1, 0);
dp[0] = 1;
dp[1] = 1;
for (int i = 2; i <= n; ++i) {
for (int j = 0; j <= i - 1; ++j) {
dp[i] += dp[j] * dp[i-1-j];
}
}
return dp[n];
}
};