剪绳子-Java实现
剪绳子
http://www.nowcoder.com/questionTerminal/57d85990ba5b440ab888fc72b0751bf8
一. 思路
二. 代码
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; } }