Day 41 | 动态规划 343. 整数拆分 、 96.不同的二叉搜索树

343. 整数拆分

题目
文章讲解
视频讲解

思路:不需要考虑正整数为1的情况。 dp[i]表示正整数i拆分后结果的最大乘积,递推公式中 j 表示拆分的正整数,最大不会超过 i-j ,否则会轮回。dp[i-j]是正整数 i-j 拆分后结果最大乘积。

class Solution {
    public int integerBreak(int n) {
        int[] dp = new int[n + 1];
        // dp[i]表示正整数i拆分后结果的最大乘积
        dp[2] = 1;
        for (int i = 3; i <= n; i++) {
            for (int j = 1; j <= i - j; j++) {
                dp[i] = Math.max(dp[i], Math.max(j * (i - j), j * dp[i - j]));
            }
        }
        return dp[n];
    }
}

96.不同的二叉搜索树

题目
文章讲解
视频讲解

思路:i 个节点,根节点 j ,左子树节点数 j-1 ,右子树节点数 i-j

class Solution {
    public int numTrees(int n) {
        int[] dp = new int[n+1];
        dp[0] = 1;
        dp[1] = 1;
        for (int i = 2; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                dp[i] += dp[j - 1] * dp[i - j];
            }
        }
        return dp[n];
    }
}

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