代码随想录刷题笔记Day 40 --动态规划之整数拆分 不同的二叉搜索树

代码随想录刷题笔记Day 40 --动态规划之整数拆分 不同的二叉搜索树

**LeetCode 343. 整数拆分 **

题目描述:

给定一个正整数 n ,将其拆分为 k正整数 的和( k >= 2 ),并使这些整数的乘积最大化。

返回 你可以获得的最大乘积

示例 1:

输入: n = 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。

示例 2:

输入: n = 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。

解题思路

解法:

写法

var integerBreak = function(n) {
    let dp = new Array(n + 1).fill(0)
    dp[2] = 1

    for(let i = 3; i <= n; i++) {
        for(let j = 1; j <= i / 2; j++) {
            dp[i] = Math.max(dp[i], dp[i - j] * j, (i - j) * j)
        }
    }
    return dp[n]
};

**LeetCode 96.不同的二叉搜索树 **

题目描述:

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。

示例 1:

代码随想录刷题笔记Day 40 --动态规划之整数拆分 不同的二叉搜索树_第1张图片

输入:n = 3
输出:5

示例 2:

输入:n = 1
输出:1

解题思路

解法:

写法

const numTrees =(n) => {
    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];
};

你可能感兴趣的:(动态规划,算法,leetcode)