代码随想录学习Day 35

343.整数拆分

题目链接

讲解链接

动归五部曲:

1.确定dp数组及其下标含义:dp[i]表示的就是第i个数拆分可得到的最大乘积;

2.确定递推公式:从1遍历j,然后有两种渠道得到dp[i],一个是j * (i - j) 直接相乘,一个是j * dp[i - j],相当于是拆分(i - j)。前者相当于只考虑拆分为两个数,后者则相当于拆分为多个数。递推公式为:dp[i] = max(dp[i], max(j * (i - j), j * dp[i - j]))

3.dp数组的初始化:dp[0] = 0,dp[1] = 1,dp[2] = 1;这里前两个不重要,只有dp[2]=1是固定的;

4.确定遍历顺序:因为dp[i]是由dp[i - j]决定的,所以要从前向后遍历;

5.举例推导dp数组:当n == 10时,对应的dp数组为[0, 1, 1, 2, 4, 6, 9, 12, 18, 27, 36]。

python 复制代码
class Solution:
    def integerBreak(self, n: int) -> int:
        dp = [1] * (n + 1)  # 创建dp数组
        dp[0], dp[1], dp[2] = 0, 1, 1  # 初始化
        for i in range(3, n + 1):  # 从前向后遍历
            for j in range(1, i + 1):  # 计算拆分后的乘积,从1到i依次计算
                dp[i] = max(dp[i], max(j * (i - j), j * dp[i - j]))  # 递推公式,取最大的
        return dp[-1]

96.不同的二叉搜索树

题目链接

讲解链接

动归五部曲:

1.确定dp数组以及下标的含义:dp[i]表示的是1到i为节点组成的二叉搜索树的个数;

2.确定递推公式:dp[i] += dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量]。j相当于是头结点的元素,从1遍历到i为止。所以递推公式:dp[i] += dp[j - 1] * dp[i - j],j-1为j为头结点左子树节点数量,i-j为以j为头结点右子树节点数量;

3.dp数组如何初始化:dp[0], dp[1], dp[2] = 1, 1, 2;

4.确定遍历顺序:首先一定是遍历节点数,从递归公式:dp[i] += dp[j - 1] * dp[i - j]可以看出,节点数为i的状态是依靠 i之前节点数的状态。所以要从前向后遍历;

5.举例推导dp数组:n = 5时,dp = [1, 1, 2, 5, 14, 42]。

python 复制代码
class Solution:
    def numTrees(self, n: int) -> int:
        if n <= 2:
            return n
        dp = [0] * (n + 1)
        dp[0], dp[1], dp[2] = 1, 1, 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]
相关推荐
wt_cs19 分钟前
银行回单ocr api集成解析-图像文字识别-文字识别技术
开发语言·python
you458039 分钟前
小程序学习笔记:使用 MobX 实现全局数据共享,实例创建、计算属性与 Actions 方法
笔记·学习·小程序
_WndProc41 分钟前
【Python】Flask网页
开发语言·python·flask
互联网搬砖老肖43 分钟前
Python 中如何使用 Conda 管理版本和创建 Django 项目
python·django·conda
测试者家园1 小时前
基于DeepSeek和crewAI构建测试用例脚本生成器
人工智能·python·测试用例·智能体·智能化测试·crewai
大模型真好玩1 小时前
准确率飙升!Graph RAG如何利用知识图谱提升RAG答案质量(四)——微软GraphRAG代码实战
人工智能·python·mcp
Brookty1 小时前
【MySQL】JDBC编程
java·数据库·后端·学习·mysql·jdbc
前端付豪1 小时前
11、打造自己的 CLI 工具:从命令行到桌面效率神器
后端·python
前端付豪1 小时前
12、用类写出更可控、更易扩展的爬虫框架🕷
后端·python
DKPT1 小时前
Java设计模式之结构型模式(外观模式)介绍与说明
java·开发语言·笔记·学习·设计模式