LeetCode 343 Integer Break 数学
Given an integer n
, break it into the sum of k
positive integers, where \(k\geq 2\), and maximize the product of those integers.
Return the maximum product you can get.
Solution
假设 \(n>4\) 时,且如果存在一个因数 \(f>4\), 那么我们可以换成 \(2,(f-2)\) 这两个因子,因为对于 product:
\[2(f-2) = 2f-4>f
\]
因此可以发现,对于大于4的因数,可以进行分解。但这并不是最优的,考虑一个例子 \(6\):
\[6 \rightarrow 3*3>2*2*2
\]
所以更优的分解是因数 \(3\)。具体来说,求解不等式:
\[3(f-3)\geq f \rightarrow f\ge 5
\]
所以当 \(n\ge 5\) 时,分解按照 \(3\) 的最大数量。 但对于 \(4\) 来说,显然最优分解为:
\[4\rightarrow 2*2>3*1
\]
点击查看代码
class Solution {
private:
int ans=1;
public:
int integerBreak(int n) {
if(n==2)return 1;
if(n==3)return 2;
if(n==4)return 4;
while(n>4){
ans*=3;n-=3;
}
ans*=n;
return ans;
}
};