一般遇到这种拆分的都是动态规划
class Solution {
public int integerBreak(int n) {
//动态规划
//dp[i]存储的是正整数i对应的拆分成两个数的最大乘积
//有可能拆出一个j,剩下的i - j 还可以继续拆
//dp[i] = Math.max(j * (i - j),j * dp[i - j])
//因为0无法拆分,1拆分成0 和 1 乘积还是0,所以dp[0] = dp[1] = 0
int[] dp = new int[n + 1];
//从2开始遍历
for(int i = 2; i <= n; i++){
int curMax = 0;
//从1开始拆
for(int j = 1; j < i; j++){
curMax = Math.max(curMax,Math.max( j * (i - j),j * dp[i - j]));
}
dp[i] = curMax;
}
return dp[n];
}
}