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];}
}