给定 n,求由 1..n 构成的不同结构 BST 数量。n=3 时有 5 棵。
以 i 为根:左子树 1..i-1(i-1 个节点),右子树 i+1..n(n-i 个节点)。
F(n) = Σ_{i=1}^n F(i-1) * F(n-i),F(0)=F(1)=1。
即卡特兰数 C_n = (2n)!/((n+1)!n!)。
class Solution {
public:
int numTrees(int n) {
vector dp(n+1);
dp[0] = dp[1] = 1;
for (int i=2; i<=n; ++i) {
dp[i] = 0;
for (int j=1; j<=i; ++j)
dp[i] += dp[j-1] * dp[i-j];
}
return dp[n];
}
};
long long numTrees(int n) {
long long c = 1;
for (int i=0; i
前几项
n=1:1, 2:2, 3:5, 4:14, 5:42, 6:132, 7:429, 8:1430, 9:4862, 10:16796...