/*
* @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))