原题
Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maximum product you can get.
For example, given n = 2, return 1 (2 = 1 + 1); given n = 10, return 36 (10 = 3 + 3 + 4).
Note: you may assume that n is not less than 2.
分析
这道题其实我们是可以找规律的,竟可能多的3,但是剩余的数又不能为1,所以定义规则如下就能够保证所求的结果最优:
对3取模,余数为1,那么就其中一个数拆分为4,其余的都为3
如果余数为2,那么其中一个数拆分为2,其余都为3.
证明
(n/x)^(n/x)的极值,其中x>=2,x<=n,n>3保证竟可能的均匀,这样才能保证结果最大。
实现
class Solution {
public:
int integerBreak(int n) {
if(n==2)
return 1;
if(n==3)
return 2;
int b=n%3;
int result=INT_MIN;
if(b==0){
result = pow(3,n/3);
}else if(b==1){
result = 4*pow(3,n/3 -1);
}else{
result = 2*pow(3,n/3);
}
return result;
}
};