LeetCode—剑指Offer:剪绳子(暴力)

剪绳子(中等)

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);
    }
}

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值