剪绳子

剑指offer

剪绳子

贪心算法

public class Solution {
    public int cutRope(int target) {

        //分解一定程度得到的就是2与3之间的关系,3越多越好
        //当%3的余数是0  6%3=2······0   3+3  =》3*3=9
            //这个时候全是3,乘积最大毕竟 2*2*2<3*3
        //当%3的余数是1  7%3=2······1
                            //    3+3+1  =》3*3=9
                             //    2+2+3=》2*2*3=12
        //分出一个1 然后凑成2个2
        //当%3的余数是2  8%3=2······2
                               //    3+3+1  =》3*3=9
                             //    2+2+3=》2*2*3=12
        //注意到取余得到的值决定2的个数,用当前数除以3的到的值决定3的个数
        
        
        //试数,1---》0*1;2---》1*1;3---》1*2
        if(target<=3&&target>0){
            return target -1;
        }
        
        
        int p = 0;//商
        int q = 0;//余数
         p = target/3;
         q = target%3;
        double res = 0;//保存最终结果,这个地方用到了pow函数,返回值类型为doble,所以为了符合题意,要强转为整形int
        if(q == 0){
            //余数为0,说明全是3
            res = Math.pow(3,p);
        }
        if(q == 1){
            //余数为1,2的个数加一个,3的个数少一个
            res =2*2* Math.pow(3,p-1);
        }
        if(q == 2){
            //余数为2,拿个2和全部的3相乘
            res = 2*Math.pow(3,p);
        }
        return (int) res;
    }
}
posted @ 2020-08-03 15:51  ASini  阅读(104)  评论(0编辑  收藏  举报