LeetCode 343.整数拆分 Integer Break

题目链接

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

例如:

2=1+1,返回1*1

3=2+1,返回2*1

4=2+2,返回2*2

5=3+2,返回2*3

6=3+3,,返回3*3

7=3+2+2,返回3*2*2

8=3+3+2,返回3*3*2

9=3+3+3,返回3*3*3

10=3+3+2+2,返回3*3*2*2

11=3+3+3+2,返回3*3*3*2

12=3+3+3+3,返回3*3*3*3

......

似乎找到了规律

n=3+3+...+3+(k*2),k=0、1、2

可是,这个是动态规划里的题目,真是尴尬

代码如下:

class Solution {
public:
    int integerBreak(int n) {
        if(n==2)    return 1;
        if(n==3)    return 2;
        int k1=n%3,k2=n/3;//余数和商
        if(k1==1)   k2--;//因为2*2大于3*1
        int sum=1;
        for(int i=0;i<k2;i++)
        {
            sum*=3;
        }
        if(k1==1)   return sum*4;//2*2大于3*1
        else if(k1==2)    return sum*2;
        else return sum;
    }
};


猜你喜欢

转载自blog.csdn.net/ZRXSLYG/article/details/80616678