题目描述
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。
样例1
输入: 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。
样例2
输入: 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。
算法1
(数学法) $O(1)$
- 这是一个非常经典的数学问题
- 先说结论:想让分割出的数乘积最大,优先拆成3,其次是2
- 为什么不能拆出5:5可以拆成2和3, 2×3 = 6 > 5,同理5以上的数也一样
- 为什么不能拆出1:1对乘积无影响,且把1加到其他分割出的数上乘积更大
- 拆出4对结果无影响:2×2 = 4
Java 代码
class Solution {
public int integerBreak(int n) {
if(n == 1 || n == 2) return 1;
if(n == 3) return 2;
if(n == 4) return 4;
int res = 1;
while(n > 4){
res *= 3;
n -= 3;
}
return res*n;
}
}