Tcdian / keep

今天不想做,所以才去做。
MIT License
5 stars 1 forks source link

343. Integer Break #276

Open Tcdian opened 4 years ago

Tcdian commented 4 years ago

343. Integer Break

给定一个正整数 n,将其拆分为 至少 两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。

Example 1

Input: 2
Output: 1
Explanation: 2 = 1 + 1, 1 × 1 = 1.

Example 2

Input: 10
Output: 36
Explanation: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36.

Note

Tcdian commented 4 years ago

Solution

/**
 * @param {number} n
 * @return {number}
 */
var integerBreak = function(n) {
    const dp = new Array(n + 1).fill(1);
    for (let i = 2; i <= n; i++) {
        for (let j = 1; j < i; j++) {
            dp[i] = Math.max(
                Math.max(j, dp[j]) * Math.max(i - j, dp[i - j]),
                dp[i]
            );
        }
    }
    return dp[n];
};
function integerBreak(n: number): number {
    const dp: number[] = new Array(n + 1).fill(1);
    for (let i = 2; i <= n; i++) {
        for (let j = 1; j < i; j++) {
            dp[i] = Math.max(
                Math.max(j, dp[j]) * Math.max(i - j, dp[i - j]),
                dp[i]
            );
        }
    }
    return dp[n];
};