题目描述
代码
/* 将绳子 以相等的长度等分为多段 ,得到的乘积最大。
尽可能将绳子以长度 3 等分为多段时,乘积最大。
切分规则:
1.最优:3。把绳子尽可能切为长度为3的片段,留下的最后一段长度可能为0,1,2三种情况。
2.次优:2。若最后一段绳子长度为2;则保留,不在拆分为1+1。
3.最差:1。若最后一段绳子长度为1,则应把一份3+1变为2+2.
算法流程:
1.当 n<=3 时,按照规则应不切分,但由于题目要求必须剪成m>1段,因此必须剪出一段长度为1的绳子,即返回n-1
2.当 n>3时,求n除以3的整数部分a和余数部分b,(3a+b)并分为以下情况:
当b=0,直接返回3的a次方
当b=1,要将一个1+3变成2+2,因此返回(3的a-1次方)*4
当b=2,返回3的a次方*2
*/
class Solution {
public int cuttingRope(int n) {
if(n <= 3){
return n-1;
}
int a = n / 3;
int b = n % 3;
if(b == 0){
return (int)Math.pow(3 , a);
}
if(b == 1){
return (int)Math.pow(3 , a-1) * 4;
}
return (int)Math.pow(3 , a) * 2;
}
}