题目描述

给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0]*k[1]*...*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。

示例1

输入: 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1

示例2

输入: 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36

做题思路

1.目标

设n可以拆分成:n=n1+n2+……+na

求:max(n1*n2*……*na)

2.数学推论

(1)当所有绳段长度相等时,乘积最大

(2)最优的绳段长度为3

3.切分规则

(1)最优:把绳子尽可能切为多个长度为3的绳段,留下的最后一段绳子的长度可能为0,1,2三种情况。

(2)次优:若最后一段绳子长度为2;则保留,不再拆分为1+1。

(3)最差:若最后一段绳子长度为1;则应把一份3+1替换为2+2,因为2+2>3*1。

4.算法流程

(1)当n<=3,按照规则不应切分,但题目要求必须分成>1段,因此必须剪出一段长度为1的绳子,即返回n-1。

(2)当n>3,求n除以3的整数部分a和余数部分b,分为以下三种情况:

①b=0时,直接返回Math.pow(3,a);

②b=1时,要将一个1+3转换为2+2,返回Math.pow(3,a-1)*4;

③b=2时,返回Math.pow(3,a)*2。

代码

class Solution {public int cuttingRope(int n) {if(n<=3){return n-1;}int a=n/3,b=n%3;if(b==0){return (int)Math.pow(3,a);}if(b==1){return (int)Math.pow(3,a-1)*4;}return (int)Math.pow(3,a)*2;}
}

I. 剪绳子(中等)相关推荐

  1. 动态规划--09-[剑]剪绳子1[中等]

    力扣 力扣 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m.n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m-1] .请问 k[0]*k[ ...

  2. 剑指offer:面试题14- II. 剪绳子 II

    题目:剪绳子 II 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m.n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m] .请问 k[0]* ...

  3. 剑指offer:面试题14- I. 剪绳子

    题目:剪绳子 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m.n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m] .请问 k[0]*k[1 ...

  4. leetcode算法题--剪绳子 II

    原题链接:https://leetcode-cn.com/problems/jian-sheng-zi-ii-lcof/ 相关题目:剪绳子 1.循环求余法 //(x ^ a) % p; long re ...

  5. NOJ——1672剪绳子(博弈)

    [1672] 剪绳子 时间限制: 500 ms 内存限制: 65535 K 问题描述 已知长度为n的线圈,两人依次截取1~m的长度,n, m为整数,不能取者为输. 输入 输入n, m:( 0 < ...

  6. 剪绳子python_Python剪绳子如何实现 Python剪绳子实现代码

    本篇文章小编给大家分享一下Python剪绳子实现代码,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 题目:剪绳子 给你一根长度为n的绳子,请把绳子剪成m段(m,n都是整数, ...

  7. 【LeetCode笔记】剑指 Offer 14. 剪绳子 I II(Java、动态规划、偏数学)

    文章目录 剪绳子 I 题目描述 思路 && 代码 1. 动态规划 O(n2n^2n2).O(n) 2. 最优解:数学方法 O(n).O(1) 二刷 剪绳子 II 题目描述 思路 &am ...

  8. 【LeetCode】剑指 Offer 14. 剪绳子

    [LeetCode]剑指 Offer 14. 剪绳子 文章目录 [LeetCode]剑指 Offer 14. 剪绳子 两道题目的区别在于第二题 n 的取值范围更大 package offer;publ ...

  9. 剪绳子 算法_[校招-算法题]动态规划

    动态规划(Dynamic Programming)是面试中非常常见的一种算法,可以解决很多复杂问题. 核心算法: 定义状态:dp[i],一个数组,具体几维根据问题定. 状态转移方程:dp[i] = b ...

  10. 14- I、 剪绳子(cuttingRope)

    14- I. 剪绳子(cuttingRope) 1. python class Solution:def cuttingRope(self, n: int) -> int:if not n:re ...

最新文章

  1. python 以 utf-8 格式写文件
  2. boost::mp11::mp_unique相关用法的测试程序
  3. ITK:索引置换序列
  4. Linux网络编程 之 UDP编程(六)
  5. 你真的会用ABAP, Java和JavaScript里的constructor么?
  6. hive 导出json格式 文件_hive中创建hive-json格式的表及查询
  7. SLG手游Java服务器的设计与开发——架构分析
  8. 【C#】通过正则表达式对TextBox进行校验
  9. C#二进制文件读取序列化与反序列化
  10. MAX25————用vray还原模型在Substance Painter的光照以及材质效果
  11. MacBook没声音
  12. 关于CAN报文中ACK应答错误的检测原理
  13. [渝粤教育] 西南科技大学 统计学原理 在线考试复习资料(3)
  14. vue判断当前浏览器为IE低版本,给出升级提示;IE11及其他浏览器正常使用
  15. edvac是商用计算机吗,计算机的基础作业1
  16. Python代码在Pycharm中不起作用,但在Jupiter Notebook中执行良好
  17. pat 7-7 莫尔斯码(Morse Code) (15分) 模拟
  18. 使用devops的团队_DevOps团队如何为网络星期一做准备
  19. python爬取国家男女比例_用python爬取3万多条评论,看韩国人如何评价韩国电影《寄生虫》?...
  20. 通用嵌入式系统软件测试平台的设计

热门文章

  1. 单片机8位抢答器实训机电报告_6位抢答器单片机实训报告要点分析.doc
  2. 修改默认模板的logo图片大小
  3. 轩辕传奇服务器维护,《轩辕传奇2》3月31日所有服务器停服更新公告
  4. 计算机专业答辩ppt通用,计算机专业毕业答辩.ppt
  5. react中使用photoswipe
  6. 产品经理考个 PMP 有用吗?
  7. 商业周刊:日本社交网站的霸主
  8. 都是服务器多IP惹的祸
  9. 嘉立创板子形状——投板笔记
  10. 基于tensorflow keras实现何凯明大神的Mask R-CNN的介绍