每日一題,防止痴呆 = =給定乙個正整數 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 不小於...