一. 思路
剪绳子后面的数学原理
二. 代码
public class Solution {
public int cutRope(int target) {
/**
*绳子长度为n,分成m分,那先设每分长度为x, 份数m=n/x
*那么结果就是 n/x个 x 相乘 f(x)=x^(n/x)
*回到本题
*绳子长度为n,分成m分,那先设每分长度为x, 份数m=n/x
*那么结果就是 n/x个 x 相乘 f(x)=x^(n/x)
*对f(x)求导,得出x取3时,f(x)可以达到最大,然后x=2次之
*
*当n能被3整除的时候,乘积=3^(n/3)
*当n除3余1的时候,这时候发现多了一个1,这个1是不是很鸡肋,但是把前面的一个3拿出来,把这个一个1和前面一个3 分解为2和2,就变大了,所以乘积为 3^(n/3 - 1) * 4
*当n除3余2的时候,乘积为3^(n/3) * 2
*/
if (target <= 0) return 0;
if (target == 1 || target == 2) return 1;
if (target == 3) return 2;
int m = target % 3;
switch (m) {
case 0 :
return (int) Math.pow(3, target /3);
case 1 :
return (int) Math.pow(3, target / 3 - 1) * 4;
case 2 :
return (int) Math.pow(3, target /3) * 2;
}
return 0;
}
}