LeetCode 0343. Integer Break Solution in Java, Python, C++, JavaScript, Go & Rust | Explanation + Code

CoderIndeed
0
0343. Integer Break

Description

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 = 2
Output: 1
Explanation: 2 = 1 + 1, 1 × 1 = 1.

Example 2:

Input: n = 10
Output: 36
Explanation: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36.

 

Constraints:

  • 2 <= n <= 58

Solutions

Solution 1: Dynamic Programming

We define f[i] as the maximum product that can be obtained by splitting the positive integer i, with an initial condition of f[1] = 1. The answer is f[n].

Consider the last number j split from i, where j ∈ [1, i). For the number j split from i, there are two cases:

  1. Split i into the sum of i - j and j, without further splitting, where the product is (i - j) × j;
  2. Split i into the sum of i - j and j, and continue splitting, where the product is f[i - j] × j.

Therefore, we can derive the state transition equation:

$$ f[i] = \max(f[i], f[i - j] \times j, (i - j) \times j) \quad (j \in [0, i)) $$

Finally, returning f[n] will suffice.

The time complexity is O(n^2), and the space complexity is O(n). Here, n is the given positive integer.

PythonJavaC++GoTypeScriptRustJavaScriptC#C
class Solution: def integerBreak(self, n: int) -> int: f = [1] * (n + 1) for i in range(2, n + 1): for j in range(1, i): f[i] = max(f[i], f[i - j] * j, (i - j) * j) return f[n](code-box)

Solution 1: Mathematics

When n < 4, since the problem requires splitting into at least two integers, n - 1 yields the maximum product. When n ≥ 4, we split into as many 3s as possible. If the last segment remaining is 4, we split it into 2 + 2 for the maximum product.

The time complexity is O(1), and the space complexity is O(1).

PythonJavaC++GoTypeScriptRustJavaScriptC#C
class Solution: def integerBreak(self, n: int) -> int: if n < 4: return n - 1 if n % 3 == 0: return pow(3, n // 3) if n % 3 == 1: return pow(3, n // 3 - 1) * 4 return pow(3, n // 3) * 2(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !