每日一題 LeetCode 343 整數拆分

2021-10-08 16:29:02 字數 644 閱讀 5934

每日一題,防止痴呆 = =

給定乙個正整數 n,將其拆分為至少兩個正整數的和,並使這些整數的乘積最大化。 返回你可以獲得的最大乘積。

兩周沒寫題了,感覺確實手生了不少,主要是去和女票畢業旅行了,之後可沒機會出去玩了 = =

題目思路

這道題用動態規劃就可以求解。我們設 dp[i] 是給定正整數 i,將 i 拆分成至少兩個正整數的和,這些正整數乘積的最大值。那麼我們就可以建立遞推公式如下:

dp[i] = max(j * dp[i - j], j * (i - j))

這裡面的 j 是從 1 - i,也就是說,在求解 dp[i] 的時候,只有兩種可能,要麼是將 i 拆分成 j 和 i - j,要麼在上面的基礎上再對 i - j 進行拆分。

官方解答裡面還提供了兩種數學的優化求解方法,因為沒有什麼共性,所以我就大致看了一下,感興趣的可以自己去看看

ac**

class

solution

}return dp[n];}

};

LeetCode 343 整數拆分(每日抑題)

給定乙個正整數 n,將其拆分為至少兩個正整數的和,並使這些整數的乘積最大化。返回你可以獲得的最大乘積。具體實現 將數字n 整除 d num 得到商new num,然後n 商 new num 同時 d num 1 繼續進行下一次除法 直到d num 0 class solution def integ...

LeetCode 343 整數拆分

給定乙個正整數 n,將其拆分為至少兩個正整數的和,並使這些整數的乘積最大化。返回你可以獲得的最大乘積。例如,給定 n 2,返回1 2 1 1 給定 n 10,返回36 10 3 3 4 注意 你可以假設 n 不小於2且不大於58 class solution public int integerbr...

Leetcode 343 整數拆分

problem describe 給定乙個正整數 n,將其拆分為至少兩個正整數的和,並使這些整數的乘積最大化。返回你可以獲得的最大乘積。示例 1 輸入 2 輸出 1 解釋 2 1 1,1 1 1。示例 2 輸入 10 輸出 36 解釋 10 3 3 4,3 3 4 36。說明 你可以假設 n 不小於...