劍指Offer 14 剪繩子

2021-10-08 22:07:55 字數 646 閱讀 2120

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 剪...