Python 劍指offer 14 剪繩子

2021-09-23 13:20:59 字數 930 閱讀 3886

題目:給你一根長度為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:剪繩子

class

solution

: def dynamic_programming

(self, n)

:if n <

2: #長度<

2,為0

return

0if n ==

2: #長度=

2,剪成兩段1

return

1if n ==

3: #長度=3,

1x2 return

2 tmp_lst =[0

,1,2

,3]for i in

range(4

, n+1)

: #長度》

4 max =

0for j in

range(1

, i)

: #從下往上分析問題

tmp = tmp_lst[j]

* tmp_lst[i - j]

if max < tmp:

max = tmp

tmp_lst.

(max)

return tmp_lst[n]

s =solution()

print

(s.dynamic_programming(8

))

竟然大概看懂(人家的**)了……安不里屋包

劍指Offer 14 剪繩子(Python)

題目描述 給你一根長度為你的繩子,請把繩子剪成m段 m n都是整數 n 1 且 m 1 每段繩子的長度記為k 0 k 1 k m 請問k 0 x k 1 x x k m 可能的最大乘積是多少?示例 當繩子長度是8時,我們把它剪成長度為2 3 3的三段,此時得到的最大乘積是18。動態規劃 尋找規律f ...

劍指offer14 整數拆分

題目描述 給定乙個正整數 n,將其拆分為至少兩個正整數的和,並使這些整數的乘積最大化。返回你可以獲得的最大乘積。例子 輸入 2 輸出 1 解釋 2 1 1,1 1 1。思路1 暴力遞迴 class solution int process int n int max 0 for int i 2 i ...

劍指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...