首页 > 其他 > 详细

343整数拆分

时间:2020-07-30 15:01:26      阅读:70      评论:0      收藏:0      [点我收藏+]
# 这道题我是用动态规划的方法来做的。
# 遍历从1 ~ n 里边所有的数差分后的最大乘积,
# 然后从中找出两个数相加等于n,判断其中的最大乘积是多少。
# 注意,这里还有一种可能,就是这个数的最大乘积,没有这个数本身大。
# 所以判断的时候用max(index2,dp[index2])

class Solution:
def integerBreak(self, n: int) -> int:
# 这里传入的数不可能是 1
dp = [0 for i in range(n + 1)]
# 这里为了简便,我把dp[1]定义成了1,其实可以写成0的。
# 因为在后边的计算中,哪怕使用到1,也是把它当做1来看
dp[1],dp[2] = 1,1
# 遍历从3 —— n的所有数。
for index1 in range(3,n + 1):
# 找出从1到index1-1的乘积,注意这里可以遍历一半
for index2 in range(1,index1 // 2 + 1):
# 动态方程,自己体会理解下
dp[index1] = max(dp[index1],max(dp[index2],index2) * max(dp[index1 - index2],index1 - index2))
return dp[n]

A =Solution()
print(A.integerBreak(10))
print(A.integerBreak(2))

343整数拆分

原文:https://www.cnblogs.com/cong12586/p/13403249.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!