leetcode 343.Integer Break 整數分割(c++)
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.
Hint:
- There is a simple O(n) solution to this problem.
- You may check the breaking results of n ranging from 7 to 10 to discover the regularities.
給定一個正整數n,分割這個數成幾個正整數數之和(至少2個正整數),並且使這些數乘積最大。返回你可以得到的最大乘積。
例如,給定n=2,返回1(2=1+1); 給定n=10,返回36(10=3+3+4)。
注意:你可以假設n不小於2.
提示:1.這個題目存在O(n)的解法;
2.你可以檢測7-10範圍內的數來發現規律。
解答思路:先找規律咯~~~ 按題目說的,7=3+4,8=3+3+2,9=3+3+3,10=3+3+4。看出來了嗎?當一個數分成最接近N個3時,結果最大,即N%3=0,則全是3,N%3=1,最後一個為4,N%3=2,最後一個為2.知道規律,答案就簡單了~可AC的C++程式碼如下:
class Solution {
public:
int integerBreak(int n) {
if(n<2) return 0;
if(n==2) return 1;
if(n==3) return 2;
if(n%3==0) return pow(3,n/3);
if(n%3==1) return 4*pow(3,n/3-1);
if(n%3==2) return 2*pow(3,n/3);
return 0;//沒有這個return 0 會報錯~~本來不想寫的
}
};