思路: 分析可得,以3构成的和最后乘积最大,针对余1和余2的情况处理有点小差别
关于为什么是3可以用数学证明出来。
假设以m为底数,和为n,则乘积为m^(n/m)
先对两边取对数,再进行求导(求导过程中n看作常数),可以看出当x=e时导数为0,判断可知该处为最大值。因为只能取整数,所以最大值在2或者3的位置,带入比较可知3处值更大。
如下图
class Solution {
public int integerBreak(int n) {
if(n < 4){
return n - 1;
}
int m = n / 3;
int ans = 0;
if(n % 3 == 1){
//4不拆
ans = (int)Math.pow(3, m - 1) * 4;
} else if(n % 3 == 2){
//5拆成3 * 2
ans = (int)Math.pow(3, m) * 2;
} else{
ans = (int)Math.pow(3, m);
}
return ans;
}
}