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.
一道数字游戏题,从简单的数字开始动动手就能找到规律。所有正整数可拆分为1,但乘1不顶用,接下来可用的最基本元素就是2和3,发现用3的积比用2的积大,所以拆分的原则是尽量拆分为3,凑不够3了才用2.
方法一:递归版本
class Solution {
public:
int integerBreak(int n) {
if(n==2) return 1;
if(n==3) return 2;
if(n==4) return 4;
if(n==5) return 6;
if(n==6) return 9;
return (3*integerBreak(n-3));
}
};
方法二:非递归版本
class Solution {
public:
int integerBreak(int n) {
if (n==2) return 1;
if (n==3) return 2;
if (n%3 == 0) return pow(3,n/3);
if (n%3 == 2) return pow(3,n/3)*2;
return pow(3,(n/3)-1)*4;
}
};