[
math
dp
]
Leetcode 0343. Integer Break
Problem statement
https://leetcode.com/problems/integer-break/
Solution
We can do it with dp way, where dp[i]
is the answer for number i
. Then to evaluate it, we need to check for every 1 <= j < i
:
j *(i-j)
and j * dp[i-j]
. Complexity will be O(n^2)
if we make assumption that multiplication is done in O(1)
.
We can note that actually all factors should be 2
or 3
, for example if we have 4
, we split it into 2, 2
, if it is 5
, we split into 2, 3
and so on.
Complexity
In this way time and space complexity is O(n)
Code
class Solution:
def integerBreak(self, n):
def dp(n):
return n if n < 5 else dp(n-3)*3
if n <= 3: return n - 1
if n == 4: return n
return dp(n)
Remark
See similar 1808. Maximize Number of Nice Divisors problem.