343. Integer Break

Обновлено: 2024-03-12
2 мин
[LeetCode Math]

LeetCode problem 343

Problem Statement

Given a positive integer n, our task is to divide it into the sum of k positive integers, where $k \geq 2$, in such a way that the product of these integers is maximized. Our goal is to determine the maximum possible product.

Naive Solution

A straightforward or naive way to solve this would be to consider all potential combinations to divide the number n and calculate the product for each division. This method, while comprehensive, would be inefficient and impractical for larger values of n.

Hints & Tips

  • Try to break down n into smaller parts and observe the pattern of the results.
  • The number 3 plays a significant role, so try to understand its impact on the problem.

Approach

A pattern emerges when observing how the number can be broken down to maximize the product: the number 3 becomes significant. This realization stems from the fact that 3 multiplied by any number $x \geq 3$ is always greater than $x \times 2$ and $x \times 1$.

The only exception is 4, where $2 \times 2$ is preferable to 3 and 1.

Therefore, the optimized approach becomes:

  1. When $n = 2$, the answer is 1 (because $1 \times 1 = 1$).

  2. For $n = 3$, the answer becomes 2 (as $2 \times 1 = 2$).

  3. If $n = 4$, the result is 4 (as $2 \times 2 = 4$).

  4. For any $n > 4$, we can repeatedly subtract 3 from n and multiply the resulting product by 3.

    After all the 3s are extracted, the remaining n (which will be less than 4) will contribute its optimal value to the product (either 1, 2, or 4).

Solution

def integerBreak(n: int) -> int:
    if n == 2:          # base cases
        return 1
    if n == 3:
        return 2
    if n == 4:
        return 4

    product = 1
    while n > 4:        # As long as n is greater than 4,
        product *= 3    # increase the product by a factor of 3
        n -= 3          # and keep reducing n by 3 

    product *= n        # Multiply the remaining value of n to the product

    return product