1. 程式人生 > 實用技巧 >343整數拆分

343整數拆分

# 這道題我是用動態規劃的方法來做的。
# 遍歷從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))