96.不同的二叉搜索树
链接:96.不同的二叉搜索树
难度:Medium
标签:树、二叉搜索树、数学、动态规划、二叉树
简介:给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?
题解 1 - typescript
- 编辑时间:2020-07-15
- 执行用时:68ms
- 内存消耗:32.3MB
- 编程语言:typescript
- 解法介绍:通过缓存进行递归。
function numTrees(n: number): number {
  const cache: Record<number, number> = { 0: 0, 1: 1, 2: 2 };
  function get(num: number): number {
    if (cache[num]) return cache[num];
    let sum = 0;
    for (let i = 1; i < num - 1; i++) sum += get(i) * get(num - 1 - i);
    sum += get(num - 1) * 2;
    cache[num] = sum;
    return sum;
  }
  return get(n);
}
题解 2 - typescript
- 编辑时间:2020-07-15
- 执行用时:84ms
- 内存消耗:32.4MB
- 编程语言:typescript
- 解法介绍:dp[i]=i 个数会有多少种方式。
function numTrees(n: number): number {
  const dp = [0, 1, 2];
  for (let i = 3; i <= n; i++) {
    let sum = 0;
    for (let j = 1; j < i - 1; j++) {
      sum += dp[j] * dp[i - 1 - j];
    }
    sum += dp[i - 1] * 2;
    dp[i] = sum;
  }
  return dp[n];
}