题目描述
给你一根长度为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===12=2
4===22=4
5===23=6
6===33=9
7===34=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); } } } }