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 and not larger than 58.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
Subscribe to see which companies asked this question.
把一个非负整数n分拆成至少两个整数之和,求分拆后各数乘积的最大值。
关键:这道题的难点其实在于拆出足够多的 3 就能使得乘积最大
class Solution {
public:
int integerBreak(int n)
{
if(n == 2) return 1;
if(n == 3) return 2;
int ret = 1;
while( n>4 )
{
ret *= 3;
n -= 3;
}
return ret * n;
}
}
探讨了如何将一个正整数n分拆为至少两个正整数的和,并通过算法实现来找到这些分拆中乘积最大的组合。示例显示,当n等于10时,分拆为3+3+4可以获得最大的乘积36。
168万+

被折叠的 条评论
为什么被折叠?



