nowcode
把一根繩子剪成多段,並且使得每段的長度乘積最大。
n = 2
return 1 (2 = 1 + 1)
n = 10
return 36 (10 = 3 + 3 + 4)
盡可能多剪長度為 3 的繩子,並且不允許有長度為 1 的繩子出現。如果出現了,就從已經切好長度為 3 的繩子中拿出一段與長度為 1 的繩子重新組合,把它們切成兩段長度為 2 的繩子。
證明:當 n >= 5 時,3(n - 3) - n = 2n - 9 > 0,且 2(n - 2) - n = n - 4 > 0。因此在 n >= 5 的情況下,將繩子剪成一段為 2 或者 3,得到的乘積會更大。又因為 3(n - 3) - 2(n - 2) = n - 5 >= 0,所以剪成一段長度為 3 比長度為 2 得到的乘積更大。
public
class
solution
}
public
class
solution
}return dp[target];}
}public
class
solution
}
劍指offer 14 剪繩子
分析 本題可以用動態規劃,也可以用貪心法。動態規劃 設f n 表示當繩子長n時可以得到的最大乘積,那麼假設在i處切一刀,就會得到數學式子f n max f i f n i 02等於4,但是當n大於等於5時,我們就要拆成盡可能多的3和剩下的2。如果要證明,我們可以證明當n大於5時,有3 n 3 2 n...
劍指offer 14 剪繩子
這種文章網上很多,沒什麼營養,我只是自己記錄一下。雖然現在不找工作了,但以後演算法能力肯定需要加強,想著能不能每天堅持一道題,其實真做起來還有點難 劍指offer以前都是邊看答案邊記下來,現在能不能靠自己寫出來呢。時間複雜度為o n2 空間複雜度為o n 有一點要注意,m不是乙個給定的引數。思路是,...
Python 劍指offer 14 剪繩子
題目 給你一根長度為n的繩子,請把繩子剪成m段 m和n都是整數,n 1並且m 1 每段繩子的長度記為k 0 k 1 k m 請問k 0 k 1 k m 可能的最大乘積是多少?例如,當繩子的長度為8時,我們把它剪成長度分別為2,3,3的三段,此時得到的最大乘積是18.解題思路 動態規劃 面試題14 剪...