题目描述
给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],...,k[m]。请问k[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。
解题思路:
先进行举例说明:
2===11=1
3===1
2=2
4===22=4
5===2
3=6
6===33=9
7===3
4=322=12
由此可看,从5开始,都没有把其分为2和3之后的乘积大。而4也可以看做是两个2.所以我们可以推测出最后结果一定是2和3的组合。
又因为222=8<3*3=9.所以要尽量把其分为3.
那么我们只需要判断有多少个3和2即可。
将目标值n对3进行求商n1和求余n2
假如n2=0-------------》则将n1个3进行相乘即可
假如n2=1-------------》则取出一个3,凑成两个2,再和剩下的n1-1个3进行相乘
假如n2=2-------------》则直接用余数组成一个2.再乘以n1个3即可。
针对于2和3 的特殊情况要进行特殊处理
后续会更新动态规划的解法

public class Solution {
    public int cutRope(int target) {
        //12ms 9532kb
        if(target==2){
            return 1;
        }else if(target==3){
            return 2;
        }else{
            int n1=target/3;
            int n2=target%3;
            if(n2==0){
                return (int)Math.pow(3,n1);
            }
            else if(n2==1){
                return 2*2*(int)Math.pow(3,n1-1);
            }else{
                return 2*(int)Math.pow(3,n1);
            }
        }
    }
}