题目
给你一根长度为 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。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
思路
由于答案需要取模,所以上一题的方法二max比较不能用了,此外,乘积可能很大,要考虑溢出问题
用贪心算法求解
class Solution:
def cuttingRope(self, n: int) -> int:
if n <4:
return n-1
a = n//3
b = n%3
if b==0: return int((3**a)%(1000000007))
if b==1: return int((3**(a-1)*4)%(1000000007))
if b==2: return int((3**a*b)%(1000000007))