将一个大于等于2的整数分拆成多个整数并使这些整数的乘积最大。
一看求乘积最大立马想到了乘方因为两数相等时乘积最大,于是几行代码写出来直接提交让leet帮忙验证。。。发现是错的,sqrt(n)并不是那个关键输字,例如n=6时是sqrt(6)=2,但2*2*2=8,而最大乘积应该是3*3=9。动规也是能写的,但需要个很大的数组存储每个数字的乘积结果,有些麻烦。越来越发现leet的题目但凡跟math有关的,代码一般都不会太难,难的是找到诡异的数学规律。。。
代码如下,要注意的是拆分到最后n<=4时,乘数的处理:
int integerBreak(int n) {
if (n == 2) return 1;
if (n == 3) return 2;
int result = 1;
int temp = 3;
while (n > 0) {
if (n <= 4)
temp = n;
result *= temp;
n -= temp;
}
return result;
}