0
点赞
收藏
分享

微信扫一扫

剑指Offer14-II-剪绳子

杰克逊爱学习 2022-02-22 阅读 48

1.思路:本题是在I的基础上做了限定,要求结果求余,所以不能再用动态规划。根据数学证明,绳子剪成多短,每段为3时乘积最大。设n 为绳子长度,n = x * a + b,即将绳子剪为a段,每段x长,余b。b可取0, 1, 2。需要注意的是,b为1时,可以和一个3凑成2 和2,这样乘机会更大。

2.代码:

class Solution {
    public int cuttingRope(int n) {
        if(n < 4) return n - 1;
        long res = 1;
        //当n大于4的时候,一直减去3
        while(n > 4){
            res = res * 3 % 1000000007;
            n -= 3;
        }
        //最后n的取值可能为4, 3, 2, 1
        return  (int)(res * n % 1000000007);
    }
}

3.复杂度分析:时间0(n),空间0(1)

举报

相关推荐

0 条评论