/*
 * @lc app=leetcode.cn id=96 lang=javascript
 *
 * [96] 不同的二叉搜索树
 * dp[i] += dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量]
 */

// @lc code=start
/**
 * @param {number} n
 * @return {number}
 */
var numTrees = function (n) {
  // 初始值都为 0
  const dp = new Array(n + 1).fill(0);
  dp[0] = 1;
  dp[1] = 1;
  for (let i = 2; i <= n; i++) {
    for (let j = 1; j <= i; j++) {
      dp[i] += dp[j - 1] * dp[i - j];
    }
    console.log(`dp[${i}]=${dp[i]}`)
  }
  return dp[n];
};
// @lc code=end


// dp[2] = (dp[0] * dp[1]) + (dp[1] * dp[0])
// dp[3] = (dp[0] * dp[2]) + (dp[1] * dp[1]) + (dp[2] * dp[0])
// dp[4] = (dp[0] * dp[3]) + (dp[1] * dp[2]) + (dp[2] * dp[1]) + (dp[3] * dp[0])
console.log(numTrees(3))