思路:面对整数拆分,来求最大积,首先第一想法是 双重循环寻找,两个子数的最大积
但是,注意本题要求,要求是 不只两个数,所以这个方法肯定不行,
但是我们可以修改以上思路,那就是利用动态规划,dp[i]存储的就是数字 i 最大子数之积,然后再利用双重循环,但是不再是判断最大两个子数之积,而是判断两个子数的最大积的最大积(这样判断,就可以把这个数分成不止两个,从而得到的是最大的),(注意有的数本身比其最大积大,所以要选本身和最大积中的最大值)
class Solution {
public int integerBreak(int n) {
int []dp = new int[59];
dp[0] = 0;
dp[1] = 0;
dp[2] = 1;
for(int i = 3 ; i < 59 ; i ++)
{
for(int j = 1 ; j < i; j ++)
{
dp[i] = Math.max(dp[i], Math.max(dp[i - j], i - j) * Math.max(dp[j], j));
}
}
return dp[n];
}
}