给你一根长度为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。
class Solution:
def cutrope(self, n):
if n < 2:
return 0
if n == 2:
return 1
if n == 3:
return 2
products = [0] * (n + 1)
products[1] = 1
products[2] = 2
products[3] = 3
for i in range(4, n + 1):
max_num = 0
for j in range(1, i//2 + 1):
product = products[j] * products[i - j]
if product > max_num:
max_num = product
products[i] = max_num
return products[n]
if __name__ == "__main__":
a = Solution()
print(a.cutrope(8))这是我在看剑指offer剪绳子问题时,仿照书上写下来的代码,问题一:为什么products[3] = 3?问题二:题目是给你一根长度为n的绳子,请把绳子剪成m段,为什么树上的代码只有一个入参n,没有入参m,我想说的是,书上的代码是不是没有按照题目要求来写。
麻烦大佬指点一下