剪绳子-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;

    }
}
全部评论

相关推荐

10-07 23:57
已编辑
电子科技大学 Java
八街九陌:博士?客户端?开发?啊?
点赞 评论 收藏
分享
牛客963010790号:为什么还要收藏
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务