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次方。