[LeetCode]Integer Break

题目:Integer Break

Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maximum product you can get.

For example, given n = 2, return 1 (2 = 1 + 1); given n = 10, return 36 (10 = 3 + 3 + 4).

Note: You may assume that n is not less than 2 and not larger than 58.

题意:将一个正整数分解成k个正整数的和的形式使得这些正整数的乘积最大,输出他们的积。

思路:

他更像一个数学题;

首先什么样的数的乘积最大呢?

如果是2,则不分解,它本身最大;

如果是3,则不分解,它本身最大;

如果是4,则不分解,它本身最大;

如果是5,则分解成2和3,乘积是6最大;

如果是6,则分解成3和3,乘积是9最大;

...

到这里就可以看出来,分解成只有2和3的数的乘积是最大的,而且优先分解成3直到只剩下一个2,此时才是最优解。

int integerBreak(int n){
    if (n < 2)return 0;
    if (n < 4)return n - 1;
    if (n == 4)return 4;
    int k = n / 3;
    if (n % 3 == 1){
        return 4 * pow(3, k - 1);
    }
    else if (n % 3 == 2){
        return 2 * pow(3, k);
    }
    return pow(3, k);
}
原文地址:https://www.cnblogs.com/yeqluofwupheng/p/7350768.html