1.解法一
参考的解法是别人数学推导出来的 啊这 先背为敬
推导规则
代码
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;
else
return (int)Math.pow(3,a)*2;
}
}
结果
2.解法二:动态规划
动态规划,每次都划分为f(i) * f(n-i),再遍历出最大值,因为是对称的所以i到n/2即可
代码
lass Solution {
public int cuttingRope(int n) {
if(n<=3) return n-1;
int[] dp=new int[n+1];
dp[0]=0;
dp[1]=1;
dp[2]=2;
dp[3]=3;
for(int i=4;i<=n;i++){
int max=0;
for(int j=1;j<=i/2;j++){
int temp=dp[j]*dp[i-j];
if(temp>max)
max=temp;
}
dp[i]=max;
}
return dp[n];
}
}