美文网首页leetcode
343. 整数拆分

343. 整数拆分

作者: geaus | 来源:发表于2020-02-08 16:35 被阅读0次

    题目描述

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

    输入: 10
    输出: 36
    解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。
    

    说明: 你可以假设 n 不小于 2 且不大于 58。

    解题思路

    对于一个正整数n,
    当n<=3时,分解结果分别为1+1,和1+2。可以将2,3看成因子分解的原子单位。
    当n>3时,优先分解为3的乘积,因为3的幂大于2的幂,例如9=3+3+3和9=2+2+2+2+1。
    所以另a=n/3,b=n%3。如果b=1的情况下由于有3<2*2,所以此时结果优先选取pow(3, a-1)22。

        int integerBreak(int n) {
            if(n<=3)
                return n-1;
    
            int a = n/3, b = n%3;
            if(b==0)
                return pow(3, a);
            else if(b==1)
                return pow(3, a-1)*4;
            else
                return pow(3, a)*b;
        }
    

    相关文章

      网友评论

        本文标题:343. 整数拆分

        本文链接:https://www.haomeiwen.com/subject/fcvixhtx.html