343. 整数拆分
解题思路:动规5部曲
class Solution:
def integerBreak(self, n: int) -> int:
dp = [0] * (n+1)
#3.初始化数组
dp[2] = 1
#4.遍历顺序
for i in range(3,n+1):
for j in range(int(i/2)+1):
#2.递推公式
dp[i] = max(dp[i],max(j*(i-j),j*dp[i-j]))
return dp
解题思路:贪心
# method 1贪心
if n == 2: return 1
if n == 3: return 2
if n == 4: return 4
total = 1
while n > 4:
total *= 3
n -= 3
total *= n
return total
96.不同的二叉搜索树
解题思路:动规5部曲(递推公式需要找一下规律)
class Solution:
def numTrees(self, n: int) -> int:
dp = [0] * (n+1)
#3.初始化
dp[0] = 1
#4.遍历顺序
for i in range(1,n+1):
for j in range(1,i+1):
#2.递推公式
dp[i] += dp[j-1] * dp[i-j]
return dp[-1]