343. Integer Break
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
From: LeetCode
Link: 343. Integer Break
Solution:
Ideas:
1. Initialization:
- Create a dp array where dp[i] represents the maximum product obtainable by breaking the integer i.
2. Dynamic Programming Fill:
- For each integer i from 2 to n, compute the maximum product by trying every possible break of i into two parts j and i - j.
- Update dp[i] with the maximum of the current value, j * (i - j), and j * dp[i - j].
3. Result:
- The result for the integer n is stored in dp[n].
Code:
c
int integerBreak(int n) {
// Base case for n = 2
if (n == 2) return 1;
// Create an array to store the maximum product for each number up to n
int dp[n + 1];
// Initialize the dp array with zeroes
for (int i = 0; i <= n; i++) {
dp[i] = 0;
}
// Fill the dp array with the maximum products
for (int i = 2; i <= n; i++) {
for (int j = 1; j < i; j++) {
// Calculate the maximum product by either breaking or not breaking the number
dp[i] = (dp[i] > j * (i - j)) ? dp[i] : j * (i - j);
dp[i] = (dp[i] > j * dp[i - j]) ? dp[i] : j * dp[i - j];
}
}
return dp[n];
}