class Solution {
int[][] memo;
public int numTrees(int n) {
// 初始化备忘录
memo = new int[n + 1][n + 1];
return count(1, n);
}
// 辅助函数,计算闭区间 [lo, hi] 组成的 BST 个数
int count(int lo, int hi) {
// base case
if (lo > hi) return 1;
// 查备忘录
if (memo[lo][hi] != 0) {
return memo[lo][hi];
}
int res = 0;
for (int mid = lo; mid <= hi; mid++) {
// mid 作为根节点root值
int left = count(lo, mid - 1);
int right = count(mid + 1, hi);
res += left * right;
}
// 将结果存入备忘录
memo[lo][hi] = res;
return res;
}
}
leecode-96-不同的二叉搜索树
最新推荐文章于 2022-02-17 16:09:59 发布