题目描述
给你一根长度为 n nn 绳子,请把绳子剪成 m mm 段(m mm、n nn 都是整数,2 ≤ n ≤ 58 2≤n≤582≤n≤58 并且 m ≥ 2 m≥2m≥2)。
每段的绳子的长度记为 k [ 1 ] 、 k [ 2 ] 、 … … 、 k [ m ] k[1]、k[2]、……、k[m]k[1]、k[2]、……、k[m]。
k [ 1 ] , k [ 2 ] , … , k [ m ] k[1],k[2],…,k[m]k[1],k[2],…,k[m] 可能的最大乘积是多少?
例如当绳子的长度是 8 88 时,我们把它剪成长度分别为 2 22、3 33、3 33 的三段,此时得到最大的乘积 18 1818。
样例
输入:8 输出:18
方法一:数学 O(n)
class Solution { public: int maxProductAfterCutting(int length) { if (length <= 3) return length - 1; int res = 1; //将lenght变成3的倍数 if (length % 3 == 2) res = 2, length -= 2; if (length % 3 == 1) res = 4, length -= 4; //两个2相乘 while (length) res *= 3, length -= 3; return res; } };
欢迎大家在评论区交流~