Leetcode--343. 整数拆分
給定一個正整數?n,將其拆分為至少兩個正整數的和,并使這些整數的乘積最大化。 返回你可以獲得的最大乘積。
示例 1:
輸入: 2
輸出: 1
解釋: 2 = 1 + 1, 1 × 1 = 1。
示例?2:
輸入: 10
輸出: 36
解釋: 10 = 3 + 3 + 4, 3 ×?3 ×?4 = 36。
說明: 你可以假設?n?不小于 2 且不大于 58。
思路:只有2,3不用拆分,其他數字只有拆為2,3才能乘積最大
4? ? ? max:2*2
5? ? ? max:2*3
6? ? ? max:2*2*2? ? ?(剛開始發現拆為3*2*1,如果出現1,那就把3*1換成2*2,使乘積最大)
7:? max:3*2*2
......
提交的代碼:
class?Solution?{
????public?int?integerBreak(int?n)?{
???????int?max=1;
????if(n==2)
????{
????????return?1;
????}
????if(n==3)
????{
????????return?2;
????}
????while(n>=3)
????{
????????max*=3;
????????n-=3;
????}
????if(n==2)
????{
????????max*=2;
????????n-=2;
????}
????if(n==1)
????{
????????max/=3;
????????max*=4;
????????n-=1;
????}
????return?max;
????}
}
完整的代碼:
public class Solution343 {
public static int integerBreak(int n) {
?? ?int max=1;
?? ?if(n==2)
?? ?{
?? ??? ?return 1;
?? ?}
?? ?if(n==3)
?? ?{
?? ??? ?return 2;
?? ?}
?? ?while(n>=3)
?? ?{
?? ??? ?max*=3;
?? ??? ?n-=3;
?? ?}
?? ?if(n==2)
?? ?{
?? ??? ?max*=2;
?? ??? ?n-=2;
?? ?}
?? ?if(n==1)
?? ?{
?? ??? ?max/=3;
?? ??? ?max*=4;
?? ??? ?n-=1;
?? ?}
?? ?return max;
? ? }
public static void main(String[] args)
{
?? ?int n =2;
?? ?System.out.println(integerBreak(n));
}
}
?
總結
以上是生活随笔為你收集整理的Leetcode--343. 整数拆分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7-4 最短工期 (25 分)
- 下一篇: 牛客--合唱队