给定一个正整数n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。然会你可以获得的最大乘积。
例如:
2=1+1,返回1*1
3=2+1,返回2*1
4=2+2,返回2*2
5=3+2,返回2*3
6=3+3,,返回3*3
7=3+2+2,返回3*2*2
8=3+3+2,返回3*3*2
9=3+3+3,返回3*3*3
10=3+3+2+2,返回3*3*2*2
11=3+3+3+2,返回3*3*3*2
12=3+3+3+3,返回3*3*3*3
......
似乎找到了规律
n=3+3+...+3+(k*2),k=0、1、2
可是,这个是动态规划里的题目,真是尴尬
代码如下:
class Solution {
public:
int integerBreak(int n) {
if(n==2) return 1;
if(n==3) return 2;
int k1=n%3,k2=n/3;//余数和商
if(k1==1) k2--;//因为2*2大于3*1
int sum=1;
for(int i=0;i<k2;i++)
{
sum*=3;
}
if(k1==1) return sum*4;//2*2大于3*1
else if(k1==2) return sum*2;
else return sum;
}
};