给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。
返回 你可以获得的最大乘积 。
提示:
- 2 <= n <= 58
- 1、数学归纳
class Solution {
public int integerBreak(int n) {
if(n <= 3) return n - 1;
int a = n / 3, b = n % 3;
if(b == 0) return (int)Math.pow(3, a);
if(b == 1) return (int)Math.pow(3, a - 1) * 4;
return (int)Math.pow(3, a) * 2;
}
}
2、动态规划
class Solution {
public int integerBreak(int n) {
int[] dp = new int[n+1];
Arrays.fill(dp,-1);
dp[2] = 1;
for(int i = 3;i < n+1;i++){
int curMax = 0;
for(int j = 1;j < i;j++){
curMax = Math.max(curMax,Math.max(j*(i-j),dp[i-j]*j));
//curMax = Math.max(curMax,j*(i-j));
}
dp[i] = curMax;
}
return dp[n];
}
}



