You are given an integer n, break it into the sum of k positive integers, where k >= 2, and maximize the product of those integers.
Return the maximum product you can get.
Example 1:
Input: n = 4
Output: 4Explanation: 4 = 2 + 2, 2 x 2 = 4.
Example 2:
Input: n = 12
Output: 81Explanation: 12 = 3 + 3 + 3 + 3, 3 x 3 x 3 x 3 = 81.
Constraints:
2 <= n <= 58class Solution:
def integerBreak(self, n: int) -> int:
def dfs(num):
if num == 1:
return 1
res = 0 if num == n else num
for i in range(1, num):
val = dfs(i) * dfs(num - i)
res = max(res, val)
return res
return dfs(n)class Solution:
def integerBreak(self, n: int) -> int:
def dfs(num, i):
if min(num, i) == 0:
return 1
if i > num:
return dfs(num, num)
return max(i * dfs(num - i, i), dfs(num, i - 1))
return dfs(n, n - 1)class Solution:
def integerBreak(self, n: int) -> int:
dp = {1: 1}
def dfs(num):
if num in dp:
return dp[num]
dp[num] = 0 if num == n else num
for i in range(1, num):
val = dfs(i) * dfs(num - i)
dp[num] = max(dp[num], val)
return dp[num]
return dfs(n)class Solution:
def integerBreak(self, n: int) -> int:
dp = {}
def dfs(num, i):
if min(num, i) == 0:
return 1
if (num, i) in dp:
return dp[(num, i)]
if i > num:
dp[(num, i)] = dfs(num, num)
return dp[(num, i)]
dp[(num, i)] = max(i * dfs(num - i, i), dfs(num, i - 1))
return dp[(num, i)]
return dfs(n, n - 1)class Solution:
def integerBreak(self, n: int) -> int:
dp = [0] * (n + 1)
dp[1] = 1
for num in range(2, n + 1):
dp[num] = 0 if num == n else num
for i in range(1, num):
dp[num] = max(dp[num], dp[i] * dp[num - i])
return dp[n]class Solution:
def integerBreak(self, n: int) -> int:
if n <= 3:
return n - 1
res = 1
while n > 4:
res *= 3
n -= 3
return res * nclass Solution:
def integerBreak(self, n: int) -> int:
if n <= 3:
return n - 1
res = 3 ** (n // 3)
if n % 3 == 1:
return (res // 3) * 4
return res * max(1, (n % 3))