给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
https://leetcode-cn.com/problems/unique-binary-search-trees/
从 i 到 j 的子树的数目和 i、j 无关,只和从 i 到 j 的元素的数量有关。
numTrees(n) = ∑ g(1, j - 1) * g(j + 1, n)
= ∑ g(j - 1) * g(i - j)
class Solution {
public int numTrees(int n) {
if (n == 1) {
return 1;
} else if (n == 2) {
return 2;
}
int[] N = new int [n + 1];
N[0] = 1;
N[1] = 1;
N[2] = 2;
for (int i = 3; i <= n; i++) {
for (int j = 1; j <= i; j++) {
N[i] += N[j - 1] * N[i - j];
}
}
return N[n];
}
}