当m>=2时对应m的每一个值都会有题目所说的可能的最大乘积,而其最大乘积也具有单调性,即每次保留当前最大的乘积,一旦下个的最大乘积小于前一个最大乘积,则前一个即为最终结果。
所以关键在于获得每个m所对应的最大乘积,而我直接用length除以m得到商和余数,(商+1)的余数次幂 乘以 商的(m-余数)次幂即为当前m所对应的最大乘积。
为什么能得到最大乘积的原因是拆分的数越接近平均数得到的乘积越大,用余数辅助凑出所含平均数越多的情况则乘积越大。
class Solution {
public int maxProductAfterCutting(int length)
{
int res = 0;
int m = 2;
while(m>=2){
int quo = length/m;//商
int rem = length%m;//余数
int temp = (int)(Math.pow(quo+1,rem)*Math.pow(quo,m-rem));
if(temp>res){
res = temp;
m++;
}
else return res;
}
return res;
}
}