题一: 整数拆分
题目链接: 整数拆分
解题思路: 确定dp[i]为对i进行拆分,得到最大乘积为dp[i],状态转移方程为dp[i] = Math.max(j * (i-j),j * dp[i-j],dp[i]);
解题代码:
var integerBreak = function(n) {
// 数值要尽量相等
// dp[i] 对i进行拆分 得到最大乘积为dp[i]
let dp = new Array(n+1).fill(0);
dp[2] = 1;
for(let i = 3; i < n + 1; i++){
for(let j =1; j <= (i / 2);j++){
dp[i] = Math.max(j * (i-j),j * dp[i-j],dp[i]);
}
}
console.log(dp);
return dp[n];
};
题二: 不同的二叉搜索树
题目链接: 不同的二叉搜索树
解题思路: dp[i]为输入i时 dp[i]种不同的二叉树。状态转移方程dp[i] += dp[j-1] * dp[i-j]
解题代码:
var numTrees = function (n) {
// dp[i] 输入i dp[i]种不同的二叉树
let 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];
}
}
return dp[n];
};