(python)劍指Offer(第二版)面試題14:剪繩子

來源:互聯網
上載者:User

標籤:nbsp   使用   python實現   gpo   重複執行   class   解法   end   長度   

題目

給你一根長度為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.

 

解題思想

動態規劃(具體解法及思路見代碼注釋)

 

解題代碼(python實現)
# 題目一:給你一根長度為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.#解題思路:動態規劃def rope_cut(length):    # 最優解數組,當長度為0是為0,當長度為1是為1,當長度為2時為2,當長度大於3時,3就不能切開了,因為3>1*2,最優解數組為3    li=[0,1,2,3]    if length==0:#當長度為0時,返回0        return 0    if length==1:#當長度為1時,返回1        return 1    if length==2:#當長度為2時,返回2        return 2    if length==3:#當長度為3時,返回2,雖然最優解數組裡為2,但是每次必須得切一刀,這樣1*2=2,所以長度為3時還是2        return 2    for j in range(4,length+1):        max = 0        for i in range(1,j):            # 思路:每次求解值時將其他小於需要求解的長度是都列出來放在一個數組裡            #如:求長度為5,最優解數組裡必須得有長度為1,2,3,4的最優解值            #註:此處使用列表儲存最優解數組是為了效能最佳化,雖然遞迴求解也能解出,但會造成大量重複執行            temp=li[i]*li[j-i]            if temp>max:                max=temp        li.append(max)#每次將上次所得最優解追加在列表裡    return li[-1]print(rope_cut(8))

 

 

 

(ps:只想說,解出一道題的感覺真的好爽)

 

(python)劍指Offer(第二版)面試題14:剪繩子

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.