力扣343 整数拆分
都是将一个数拆成几个数之和,使得这几个数乘起来乘积最大
//解释一下题目:绳子长度为n,切成a段,即n=n1+n2+n3+......+na
//现在要求的是:max(n1*n2*n3*.......*na)
//结论:把绳子切成尽可能多长度为3的片段,这样还剩下最后一段的长度可能是0,1,2
//(1)当最后一段长度为2的时候,保留
//(2)当最后一段长度为1的时候,则一份3和剩下的这份1(即3+1)变成2+2
核心代码:
int a=n/3,b=n%3;
if(b==0) return (int)Math.pow(3,a);
if(b==1) return (int)Math.pow(3,a-1)*4;
if(b==2) return (int)Math.pow(3,a)*2;
class Solution
{
public int cuttingRope(int n)
{
//题目要求至少切成两段(绳子长度至少为2)
//如果绳子的长度为2或者3的时候
if(n==2) return 1;
if(n==3) return 2;
//n=3*a+b
int a=n/3,b=n%3;
//若最后余数是0:
if(b==0) return (int)Math.pow(3,a);
if(b==2) return (int)Math.pow(3,a)*2;
if(b==1) return (int)Math.pow(3,a-1)*2*2;
return 0;
}
}
力扣剑指offer14 剪绳子 是一摸一样的