Welcome to Subscribe On Youtube

343. Integer Break

Description

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

Solutions

Dynamic programming.

  • class Solution {
        public int integerBreak(int n) {
            if (n < 4) {
                return n - 1;
            }
            if (n % 3 == 0) {
                return (int) Math.pow(3, n / 3);
            }
            if (n % 3 == 1) {
                return (int) Math.pow(3, n / 3 - 1) * 4;
            }
            return (int) Math.pow(3, n / 3) * 2;
        }
    }
    
  • class Solution {
    public:
        int integerBreak(int n) {
            if (n < 4) {
                return n - 1;
            }
            if (n % 3 == 0) {
                return pow(3, n / 3);
            }
            if (n % 3 == 1) {
                return pow(3, n / 3 - 1) * 4;
            }
            return pow(3, n / 3) * 2;
        }
    };
    
  • class Solution:
        def integerBreak(self, n: int) -> int:
            if n < 4:
                return n - 1
            if n % 3 == 0:
                return pow(3, n // 3)
            if n % 3 == 1:
                return pow(3, n // 3 - 1) * 4
            return pow(3, n // 3) * 2
    
    
  • func integerBreak(n int) int {
    	if n < 4 {
    		return n - 1
    	}
    	if n%3 == 0 {
    		return int(math.Pow(3, float64(n/3)))
    	}
    	if n%3 == 1 {
    		return int(math.Pow(3, float64(n/3-1))) * 4
    	}
    	return int(math.Pow(3, float64(n/3))) * 2
    }
    
  • function integerBreak(n: number): number {
        if (n < 4) {
            return n - 1;
        }
        const m = Math.floor(n / 3);
        if (n % 3 == 0) {
            return 3 ** m;
        }
        if (n % 3 == 1) {
            return 3 ** (m - 1) * 4;
        }
        return 3 ** m * 2;
    }
    
    
  • impl Solution {
        pub fn integer_break(n: i32) -> i32 {
            if n < 4 {
                return n - 1;
            }
            let count = (n - 2) / 3;
            (3i32).pow(count as u32) * (n - count * 3)
        }
    }
    
    
  • /**
     * @param {number} n
     * @return {number}
     */
    var integerBreak = function (n) {
        const f = Array(n + 1).fill(1);
        for (let i = 2; i <= n; ++i) {
            for (let j = 1; j < i; ++j) {
                f[i] = Math.max(f[i], f[i - j] * j, (i - j) * j);
            }
        }
        return f[n];
    };
    
    
  • public class Solution {
        public int IntegerBreak(int n) {
            int[] f = new int[n + 1];
            f[1] = 1;
            for (int i = 2; i <= n; ++i) {
                for (int j = 1; j < i; ++j) {
                    f[i] = Math.Max(Math.Max(f[i], f[i - j] * j), (i - j) * j);
                }
            }
            return f[n];
        }
    }
    

All Problems

All Solutions