剪绳子问题

给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m]。请问k[0]xk[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。

思路:贪心算法  这个首先我们从比较小的数字开始看看规律

4:2*2 5:3*3 6:3*3 7:4*3 8:2*3*3 9:3*3

从这些规律中可以看出一般都是由2、3组成但是3的数目大于2的数目;

class Solution:
    def cutRope(self, number):
        # write code here
        res=1
        if number<=1:
            return 0
        elif number<=2:
            return 1
        elif number<=3:
            return 2
        elif number>3:
            if number%3==0:
                res=3**(number//3)
            elif number%3==1:
                res=3**(number//3-1)*4
            else:
                res=3**(number//3)*(number%3)
        return res

 

posted @ 2020-05-17 21:54  谁谁是谁  阅读(434)  评论(0)    收藏  举报