剪绳子(中等)
2020年8月15日
题目来源:力扣
解题
看图
由图可发现规律,在5这个数时,单纯拆分成1+4已经无法满足了,1+4还可以拆成1+1+3或者1+2+2,那么我们可以发现,对数字进行拆分,最后都会是以1、2、3这三个数字构成的。
也通过图可发现,1这个数字在最大值中并不会出现,那么底数就只会是2和3了。
自然的,我们会把大数3作为首要的拆分点,能多拆3就多拆3,但是观察图中,4这个数字的最大值是2*2,那么4就是一个比较特殊的点,需要做额外的判断。
在排除1、2、3之后,判断一个数与3的余数是否为1,如果为1则必有4可作为拆分点,那么我们就需要把4单独拿出来,再以3为主要拆分点。
class Solution {
public int cuttingRope(int n) {
if(n<=3) return n-1;
int res=1;
//解决特殊情况
int temp_n=n%3==1?n-4:n;
//求3的拆分个数
int three_num=temp_n/3;
res*=Math.pow(3,three_num);
return res*(temp_n==three_num*3?1:temp_n-three_num*3)*(n-temp_n==0?1:4);
}
}