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.
Hint:
- There is a simple O(n) solution to this problem.
- You may check the breaking results of n ranging from 7 to 10 to discover the regularities.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
Subscribe to see which companies asked this question
其实就是一道小学奥数题,尽可能多的分成3,如果最后剩下的是1,那就变成两个2
class Solution(object):
def integerBreak(self, n):
if n == 2:
return 1
if n == 3:
return 2
p = n / 3
rest = n % 3
#print p,rest
if rest == 1:
return 3 ** (p-1) * 4
elif rest == 0:
return 3 ** (p)
else:
return (3 ** p) * rest