LeetCode 343.整數拆分 Integer Break
阿新 • • 發佈:2018-12-11
給定一個正整數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; } };