Integer Break

medium math dp

Problem

Given an integer n ≥ 2, break it into at least two positive integers whose product is maximized. Return that maximum product.

Inputn = 10
Output36
10 = 3 + 3 + 4 → 3·3·4 = 36.

def integer_break(n):
    dp = [0] * (n + 1)
    for i in range(2, n + 1):
        for j in range(1, i):
            dp[i] = max(dp[i], j * (i - j), j * dp[i - j])
    return dp[n]
function integerBreak(n) {
  const dp = new Array(n + 1).fill(0);
  for (let i = 2; i <= n; i++) {
    for (let j = 1; j < i; j++) {
      dp[i] = Math.max(dp[i], j * (i - j), j * dp[i - j]);
    }
  }
  return dp[n];
}
class Solution {
    public int integerBreak(int n) {
        int[] dp = new int[n + 1];
        for (int i = 2; i <= n; i++)
            for (int j = 1; j < i; j++)
                dp[i] = Math.max(dp[i], Math.max(j * (i - j), j * dp[i - j]));
        return dp[n];
    }
}
int integerBreak(int n) {
    vector<int> dp(n + 1, 0);
    for (int i = 2; i <= n; i++)
        for (int j = 1; j < i; j++)
            dp[i] = max({dp[i], j * (i - j), j * dp[i - j]});
    return dp[n];
}
Time: O(n²) Space: O(n)