给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。
示例 1:
输入: 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。
示例 2:
输入: 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。
说明: 你可以假设 n 不小于 2 且不大于 58。
思路:本题主要是找到规律,3*3>2*2*2。代码如下
C++
class Solution {
public:
int integerBreak(int n)
{
if(2==n)
{
return 1;
}
else if(3==n)
{
return 2;
}
int mod=n%3;
int num=n/3;
if(0==mod)
{
return pow(3,num);
}
else if(1==mod)
{
return pow(3,num-1)*4;
}
else
{
return pow(3,num)*2;
}
}
};
python
class Solution:
def integerBreak(self, n: int) -> int:
if 2==n:
return 1
elif 3==n:
return 2
mod=n%3
num=n//3
if 0==mod:
return 3**num
elif 1==mod:
return 3**(num-1)*4
else:
return 3**num*2