题目描述:给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],...,k[m]。请问k[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。
思路分析:
长度为n的绳子,请把绳子剪成整数长度的m段,长度为3的段数越多(切割越接近自然底数(约等于2.7)乘积越大!),最后的乘积越大。
所以尽可能的划分更多的3,最多能够划分长度为3的块数:n/3。剩下的长度根据n%3划分为三种情况:
0:全部切割为长度为三。
1:减少一块3,和剩下的1凑成4,然后分成两块各为2。
2:最后一块就是2。
程序代码:
public class Solution {
public int cutRope(int target){
if(target==2){
return 1*1;
}
if(target==3){
return 2*1;
}
int num=target/3;
int rest=target%3;
if(rest==0){
return (int)Math.pow(3,num);
}
else if(rest==1){
return (int)Math.pow(3,num-1)*2*2;
}
else{
return (int)Math.pow(3,num)*2;
}
}
}