【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:剪繩子
class Solution:
    def dynamic_programming(self, n):
        if n < 2:   #長度<2,為0
            return 0
        if n == 2:  #長度=2,剪成兩段1
            return 1
        if n == 3:  #長度=3,1x2
            return 2
        tmp_lst = [0, 1, 2, 3]
        for i in range(4, n+1):     #長度>4
            max = 0
            for j in range(1, i):   #從下往上分析問題
                tmp = tmp_lst[j] * tmp_lst[i - j]
                if max < tmp:
                    max = tmp
            tmp_lst.append(max)
        return tmp_lst[n]

s = Solution()
print(s.dynamic_programming(8))

竟然大概看懂(人家的代碼)了……安不裡屋包

点赞

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *