classSolution(object):defintegerBreak(self, n):"""
:type n: int
:rtype: int
"""
dp=[0]*(n+1)
dp[1]=1
dp[2]=1for i inrange(3,n+1):for j inrange(1,i):# 优化版本可以写为 for j in range(1,i//2+1)
dp[i]=max(j*dp[i-j],j*(i-j),dp[i])return dp[n]
二、贪心(不需要掌握)
classSolution:defintegerBreak(self, n):if n ==2:# 当n等于2时,只有一种拆分方式:1+1=2,乘积为1return1if n ==3:# 当n等于3时,只有一种拆分方式:2+1=3,乘积为2return2if n ==4:# 当n等于4时,有两种拆分方式:2+2=4和1+1+1+1=4,乘积都为4return4
result =1while n >4:
result *=3# 每次乘以3,因为3的乘积比其他数字更大
n -=3# 每次减去3
result *= n # 将剩余的n乘以最后的结果return result