原题链接:https://leetcode-cn.com/problems/jian-sheng-zi-lcof/
推论一:将绳子以相等的长度等分为多段,得到段乘积最大
推论二:尽可能将绳子以长度为3等分为多段时,乘积最大
切分规则:
- 最优: 3。把绳子尽可能切为多个长度为
3
的片段,留下的最后一段绳子的长度可能为0,1,2三种情况。 - 次优: 2。若最后一段绳子长度为
2
;则保留,不再拆为1 + 1
。 - 最差: 1。若最后一段绳子长度为
1
;则应把一份3 + 1
替换为2 + 2
,因为2 + 2 > 3 * 1
。
来源:
代码:
int cuttingRope(int n) {
if (n <= 3) return n - 1;
int a = n / 3, b = n % 3;
if (b == 0) return (int)pow(3, a);
if (b == 1) return (int)pow(3, a - 1) * 4;
return (int)pow(3, a) * 2;
}