题意
本题的题意是,给定一个数字 n,n可以由几个数相加而成,比如 2=1+1,10=5+5,10=2+8…
要我们求出 组合中最大的乘积是多少,比如 n = 10 的时候,最大的乘积就是 10 = 3 + 3 + 4
返回 36
Code
public class Solution {
public int integerBreak(int n) {
if(n == 0){
return 0;
}
if(n == 1){
return 1;
}
if(n == 2){
return 1;
}
if(n == 3){
return 2;
}
int pro = 1;
while(n > 0){
if(n == 4){
pro *= 4;
break;
} else if (n == 3){
pro *= 3;
break;
} else if (n == 2){
pro *= 2;
break;
} else {
pro *= 3;
n -= 3;
}
}
return pro;
}
}
自己的思路
看了题目中给的提示,从 7,8,9,10 这几个数中我们可以看出,3,4这两个数的特殊性。
求一个数的最大组合乘积 F(n)
F(n) = max( F(1)XF(n-1) , F(2)XF(n-2)……..F(n-1)XF(1))
上式子为子问题的划分,每一个都能划分为几个乘积,由规律可看出,3的最大乘积是2,小于3的。所以所有划分划分到3是最好的
为什么不划分到 4呢? 因为 F(4) 是3 ,和3相比还多了一个数