Integer Break(Medium)

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.

解题思路

Whenever we have a k > 3, we will separate it into small numbers Finally, all the small numbers will be either 2 or 3.

public int integerBreak(int n) {
    if (n == 2) return 1;
    if (n == 3) return 2;
    if (n % 3 == 0) return (int)Math.pow(3, n / 3);
    // we cannot have a small number that is equal to 1. Then use 4 instead.
    if (n % 3 == 1) return (int)Math.pow(3, (n - 4) / 3) * 4;
    return (int)Math.pow(3, (n - 2) / 3) * 2;
}

References

  1. Java solution with detailed explanation and proof

results matching ""

    No results matching ""