题目
样例
输入:8
输出:18
解析
题目要求m>2,因此乘积中不能存在1
对于一个大于4的数X,将其拆分成3 和 X - 3。//因为(X-3)*3 = 3X-9 > X
如果X=4,拆成2+2,乘积不变、
如果有三个以上的2,那么3*3 > 2*2*2,替换成3后,得到的乘积更大
综上,已经讨论了2、3、4及大于4的情况。并得出结论,尽可能有更多的3,直到剩下2或4时用2。
时间复杂度:O(n) // n被拆分成⌈n/3⌉ 个数
代码
class Solution {
public:
int maxProductAfterCutting(int n) {
if(n <= 3) return 1 * (n - 1);
int res = 1;
if(n % 3 == 1) res = 4, n -= 4; //不能出现1
else if (n % 3 == 2) res = 2, n -= 2;
while(n) res *= 3, n -= 3;
return res;
}
};