343. Integer Break

Medium

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

解題

DP

Runtime: 0 ms, faster than 100%

Memory Usage: 1.9 MB, less than 88.71%

func integerBreak(n int) int {
    dp := make([]int, n + 1)
    dp[0] = 0

    for i:=1; i<=n; i++ {
        max := 0
        for j:=0; j<=i/2; j++ {
            if j * (i - j) > max {
                max = j * (i - j)
            }

            if dp[j] * dp[i - j] > max {
                max = dp[j] * dp[i - j]
            }

            if dp[j] * (i - j) > max {
                max = dp[j] * (i - j)
            }

            if dp[i - j] * j > max {
                max = dp[i - j] * j
            }
        }
        dp[i] = max
    }

    return dp[n]
}

Last updated