刷题笔记(18)--剪绳子II(贪心)

Posted HardyDragon_CC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题笔记(18)--剪绳子II(贪心)相关的知识,希望对你有一定的参考价值。

剪绳子II

在这里插入图片描述

这题和前面的剪绳子 n 的取值范围不同,涉及到了大数会越界的问题,需要每次都对其取余。

  • n = 2时,特殊解为1 * 1 = 1;n = 3时,特殊解为 1 * 2 = 2;n=4 , 2 * 2=4;
  • n > 4时,最优解应该是包含尽可能多的长度为 3 的子绳。例如 n = 6 ,最优解为3 * 3,而不是2 * 2 * 2;
  • 使用 long 存储结果还不够,还需要做到每次的中间结果都取余。
class Solution {
    public int cuttingRope(int n) {
        // 对于 2 3 返回 1 和 2是特殊解
        if(n <= 3) return n-1;
        // res 使用 long 防止中间结果取余后过大
        long res = 1;
        // 对 长度大于4的,尽可能分解多的长度3 
        while(n > 4){
            res *= 3;
            // 每步都要取余,防止中间结果超出 long 取值范围
            res = res % 1000000007;
            n -= 3;
        }
        // 最后对 long 转换类型,依然要取余。
        return (int)(res * n % 1000000007);
    }
}

以上是关于刷题笔记(18)--剪绳子II(贪心)的主要内容,如果未能解决你的问题,请参考以下文章

动态规划贪心剪绳子

刷题笔记(17)--整数拆分/剪绳子(动态规划)

动态规划与贪心算法_剪绳子问题

剑指offer-动态规划-贪心算法--剪绳子-python

剑指offer--14-II 剪绳子

《剑指 Offer(第 2 版)》系列刷题