Day 40 动态规划 part03
今日任务
-
- 整数拆分
- 96.不同的二叉搜索树
代码实现
- 整数拆分
public int integerBreak(int n) {
int[] dp = new int[n + 1];
dp[2] = 1;
for (int i = 3; i < n + 1; i++) {
for (int j = 1; j < i; j++) {
dp[i] = Math.max(j * Math.max(i - j, dp[i - j]), dp[i]);
}
}
return dp[n];
}
96.不同的二叉搜索树
public int numTrees(int n) {
if (n < 2) return 1;
int[] dp = new int[n + 1];
dp[0] = 1;
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i < n + 1; i++) {
for (int j = 0; j < i; j++) {
dp[i] += dp[j] * dp[i -j - 1];
}
}
return dp[n];
}
今日总结
- 目前所做的动态规划本质上还是在找规律,如何从dp数组的前一种状态推出dp数组的下一种状态,目前的都还比较简单,背包问题就比较难了;
- 今天大涨,我不出意外的话,今天又会是4月涨的最好的一天。