题
思
dp
不管拆成几段,都是从拆成两段开始。
那就算出拆成哪两段是最大的。
代码
class Solution {
public int integerBreak(int n) {
if (n == 2 || n == 3) {
return n - 1;
}
int[] dp = new int[60];
dp[2] = 2;
dp[3] = 3;
for (int i = 4; i <= n; i++) {
for (int j = 1; j <= i - j; j++) {
if (dp[j] * dp[i - j] > dp[i]) {
dp[i] = dp[j] * dp[i - j];
}
}
}
return dp[n];
}
}