劍指 Offer 14 I 剪繩子

2021-10-14 13:00:24 字數 528 閱讀 7700

劍指 offer 14- i. 剪繩子

給你一根長度為 n 的繩子,請把繩子剪成整數長度的 m 段(m、n都是整數,n>1並且m>1),每段繩子的長度記為 k[0],k[1]...k[m-1] 。請問 k[0]*k[1]*...*k[m-1] 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2、3、3的三段,此時得到的最大乘積是18。

示例 1:

輸入: 2

輸出: 1

解釋: 2 = 1 + 1, 1 × 1 = 1

示例 2:

2 <= n <= 58

可以用動態規劃解,一開始想不明白 怎麼用,為什麼可以用動態規劃,n可以拆成兩部分,一部分是確定的一段段長(不再分),

另外一部分是未知段(不確定需不需要再分),而每個數對應的最大乘積又依賴於比他小的數(這是重點,找出依賴關係),所以可以用前面的數往後推。因此可以用動態規劃。

class solution 

}return dp[n];

}}

劍指 Offer 14 I 剪繩子

問題 給你一根長度為 n 的繩子,請把繩子剪成整數長度的 m 段 m n都是整數,n 1並且m 1 每段繩子的長度記為 k 0 k 1 k m 1 請問 k 0 k 1 k m 1 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到的最大乘積是18。示例...

劍指 Offer 14 I 剪繩子

一 數學推導法 經過一系列推導發現每一段長度為3時,乘積最大。時間複雜度 o 1 空間複雜度 o 1 class solution 二 貪心演算法本質上和數學推導相同,當剩餘長度大於5時每段都切成3,當切到4時,4的最優解是2 2即不切n小於4 返回n 1 n等於4 返回4 n大於4時 繼續切割成長...

劍指 Offer 14 I 剪繩子

從題目中可以看出,有最優子結構,可以聯想到動態規劃,其遞迴樹如下 可以看出,具有很多重疊子問題。1 記憶化搜尋 2 class solution 10int breakinteger int n 21 memo n res 22return memo n 2324 25 public 26 int ...