代码随想录算法训练营第四十一天
343. 整数拆分
代码
# !/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2022.12
# @Author : hello algorithm!
# @Note : https://leetcode.cn/problems/integer-break/
class Solution:
def integerBreak(self, n: int) -> int:
# 初始化dp数组,其中dp[0]和dp[1]为0,本题不参与计算,即索引从2开始
dp = [0] * (n + 1)
# 题目描述n>=2
if n >= 2:
dp[2] = 1
for j in range(3, n + 1):
for i in range(1, j // 2 + 1):
dp[j] = max(i * dp[j - i], i * (j - i), dp[j])
return dp[-1]
if __name__ == '__main__':
s = Solution()
n = 5
print(s.integerBreak(n))
96. 不同的二叉搜索树
代码
# !/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2022.12
# @Author : hello algorithm!
# @Note : https://leetcode.cn/problems/unique-binary-search-trees/
class Solution:
def numTrees(self, n: int) -> int:
dp = [0] * (n + 1)
if n <= 2:
return n
dp[0] = 1
dp[1] = 1
dp[2] = 2
for i in range(3, n + 1):
for j in range(1, i + 1):
dp[i] += dp[j - 1] * dp[i - j]
return dp[-1]
if __name__ == '__main__':
s = Solution()
n = 3
print(s.numTrees(n))