1. 程式人生 > >LeetCode 343.整數拆分 Integer Break

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;
    }
};