🚩传送门:力扣题目

题目

给你一根长度为 [LC]14. 剪绳子 I - 图1的绳子,请把绳子剪成整数长度的[LC]14. 剪绳子 I - 图2 段([LC]14. 剪绳子 I - 图3 都是整数,[LC]14. 剪绳子 I - 图4并且[LC]14. 剪绳子 I - 图5),每段绳子的长度记为 [LC]14. 剪绳子 I - 图6 。请问 [LC]14. 剪绳子 I - 图7 可能的最大乘积是多少?
例如,当绳子的长度是[LC]14. 剪绳子 I - 图8时,我们把它剪成长度分别为[LC]14. 剪绳子 I - 图9的三段,此时得到的最大乘积是[LC]14. 剪绳子 I - 图10

示例 1:

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

示例 2:

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

示例 3:

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

解题思路:数学推导

详情见同类题:数字拆分

复杂度分析

时间复杂度:[LC]14. 剪绳子 I - 图11,仅有求证、求余、次方运算 。

空间复杂度:[LC]14. 剪绳子 I - 图12[LC]14. 剪绳子 I - 图13[LC]14. 剪绳子 I - 图14 使用常数大小额外空间 。

官方代码

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