public class Solution { public int cutRope(int target) { if(target<=0) return 0; if(target==1 || target == 2) return 1; if(target==3) return 2; //所有的数都分成 2和3 x个2 y个3 int yu = target % 3;// 1或者2 if(yu == 1){ return ((int)Math.pow(3,target/3-1)) * 4; }else if(yu == 2){ return (int)Math.pow(3,target/3) * 2; }else{ return (int)Math.pow(3,target/3); } } }
看代码能看明白,其实绳子就是分成多段,每段的长度是2或者3,为什么不是4,5,6?因为所有的比2 3大的数字都可以被2和3 相加,自身加得到,不是能分成的最小的单位,分的越多,并且3越多,乘积就越大。可以自己尝试几个数字。比如8,可以分成 2222=16,或者332=18。
当余数为1时,3这边在让出一个3,乘以2个2就是最大值,因为这时有两种可能,3的n次方1和3的n-1次方*4,都能构成一根绳子,比较大小可知道第二个更大。当余数为2时直接乘2.余数为0,直接是3的n次方。