- 利用动态规划,需要O(n^2)时间和O(n)空间,也就是利用一个表,储存长度为1~n绳子的最大乘积。
class Solution:
def cutRope(self, number):
# write code here
if number < 2: return 0
if number == 2:return 1
if number == 3:return 2
products = [0, 1, 2, 3]
for i in range(4, number+1, 1):
product = 0
for j in range(1,4//2+1,1):
res = products[j]* products[i-j]
product = max(res,product)
products.append(product)
return products[-1]
- 贪婪算法:这种想法比较巧妙,尽量把大于5的数分解成3的乘积,如果剩下的长度为4,则把4分解成2和2,因为3
1 < 2
2。
class Solution:
def cutRope(self, number):
# write code here
if number < 2: return 0
if number == 2:return 1
if number == 3:return 2
timesof3 = number // 3
if number - timesof3 * 3 == 1:
timesof3 -= 1
timesof2 = (number - timesof3 * 3) / 2
return (3**timesof3)*(2**timesof2)