[剑指offer] 67 剪绳子
题目
给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],…,k[m]。请问k[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。(2 <= n <= 60)
分析
python代码
class Solution:
def cutRope(self, number):
# write code here
ld = {1: 1}
for z in range(2, number + 1):
max_mulity = 0
for m in range(1, int(z / 2) + 1):
n = z - m
tmp_arr = [ld[m] * ld[n], m * ld[n], ld[m] * n, m * n]
for t in tmp_arr:
if t > max_mulity:
max_mulity = t
ld[z] = max_mulity
return ld[number]
算法复杂度
O(n*(1+n/2)/2*4) 约等于 O(n^2)