代码随想录Day34 | 62.不同路径,63.不同路径II,343.整数拆分,96.不同的二叉搜索树

news/2025/1/15 1:58:40 标签: 算法, 数据结构, java, leetcode, 动态规划

代码随想录Day34 | 62.不同路径,63.不同路径II,343.整数拆分,96.不同的二叉搜索树

62.不同路径

动态规划第二集:

比较标准简单的一道动态规划,状态转移方程容易想到

难点在于空间复杂度的优化,详见代码

java">class Solution {
    public int uniquePaths(int m, int n) {
        // 标准的动态规划
        int[][] dp = new int[m + 1][n + 1];
        // 初始化时多加了一行一列,方便初始化
        dp[1][0] = 1;
        for (int i = 1; i < dp.length; i++) {
            for (int j = 1; j < dp[0].length; j++) {
                // 状态转移方程
                dp[i][j] = dp[i][j - 1] + dp[i - 1][j];
            }
        }
        return dp[m][n];
    }
}

class Solution {
    public int uniquePaths(int m, int n) {
        // 标准的动态规划,空间优化版
        int[] dp = new int[n + 1];
        dp[1] = 1;
        for (int i = 1; i <= m; i++) {
            for (int j = 2; j <= n; j++) {
                // 状态转移方程
                // 只需要第 i 行与第 i-1 行的数据
                // dp[j - 1]已更新,是第 i 行的数据
                // dp[j]未更新,是第 i-1 行的数据
                dp[j] = dp[j - 1] + dp[j];
            }
        }
        return dp[n];
    }
}

63.不同路径II

相比上题只多了一个障碍的判断

java">class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int m = obstacleGrid.length;
        int n = obstacleGrid[0].length;
        // 空间优化思路同62题
        int[] dp = new int[n + 1];
        dp[1] = 1;
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                // 处理障碍情况
                if (obstacleGrid[i - 1][j - 1] == 1)
                    dp[j] = 0;
                // 状态转移方程
                else dp[j] = dp[j - 1] + dp[j];
            }
        }
        return dp[n];
    }
}

343.整数拆分

动态规划问题,相对简单,想清楚状态转移方程就好,详见代码注释

java">class Solution {
    public int integerBreak(int n) {
        // dp[i] 的定义是 对 i 进行划分后的最大乘积
        int[] dp = new int[n + 1];
        dp[2] = 1;
        // 动态规划
        for (int i = 3; i <= n; i++) {
            // 循环进行划分
            for (int j = 1; j <= i / 2; j++) {
                // 状态转移方程
                // j * dp[i - j] 相当于是 在 i-j 中进行了多次划分
                // j * (i - j) 是只划分一次
                dp[i] = Math.max(dp[i], Math.max(j * dp[i - j], j * (i - j)));
            }
        }
        return dp[n];
    }
}

96.不同的二叉搜索树

动态规划

要注意到,二叉树种类数目 = 左子树种类数目 * 右子树种类数目

java">class Solution {
    public int numTrees(int n) {
        // dp[i]定义为 i个节点时,互不相同的BST的种类数
        int[] dp = new int[n + 1];
        // 初始化:0个节点时只有一种
        dp[0] = 1;
        for (int i = 1; i <= n ; i++) {
            // 循环选择根节点为 j
            for (int j = 1; j <= i; j++) {
                // dp[j - 1]为左子树种类数,dp[i - j]为右子树种类数
                // 左右数目相乘即为根节点为 j 时的种类数
                // 累加到 dp[i] 上
                dp[i] += dp[j - 1] * dp[i - j];
            }
        }
        return dp[n];
    }
}

http://www.niftyadmin.cn/n/5823346.html

相关文章

【高阶数据结构】位图

位图 一.位图相关面试题二.位图的设计及实现三.C库中的位图bitset四.位图的优缺点五.位图相关考察题目 一.位图相关面试题 问题&#xff1a;给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个数中&#xff08;本…

Portainer.io安装并配置Docker远程访问及CA证书

Portainer.io安装并配置Docker远程访问及CA证书 文章目录 Portainer.io安装并配置Docker远程访问及CA证书一.安装 Portainer.io2.启动容器 二.docker API远程访问并配置CA安全认证1.配置安全(密钥)访问2.补全CA证书信息3.生成server-key.pem4.创建服务端签名请求证书文件5.创建…

Cesium入门学习6(2025年版本)----- 卫星轨迹

1.完整学习衔接&#xff1a; cesium入门学习一_cesium入门难吗-CSDN博客https://blog.csdn.net/Jinyizhi2233/article/details/144713925 cesium入门学习二-CSDN博客https://blog.csdn.net/Jinyizhi2233/article/details/144723617 cesium入门学习三_cesium 点击事件-CSDN博…

【已解决】服务器端直接从网页下载Huggingface全部文件-命令行方式

在试图使用git clone下载Hugging face文件的时候大家或许会遇到这样的问题&#xff1a; fatal: unable to access https://huggingface.co/MVRL/GeoSynth/: Failed to connect to huggingface.co port 443 after 134317 ms: Connection timed out 于是有人告诉你&#xff0c;需…

践行“金融为民” 平安养老险迎来理赔新篇章

近日&#xff0c;平安养老险发布2024年度理赔服务报告&#xff0c;报告显示&#xff0c;公司全年提供理赔服务2515万人次&#xff0c;日均服务6.8万人次。全年赔付金额180亿元&#xff0c;日均赔付超4900万元&#xff0c;单笔最高赔付额673万元。 从理赔类型来看&#xff0c;2…

深入探讨 Vue.js 的动态组件渲染与性能优化

Vue.js 作为一款前端领域中备受欢迎的渐进式框架&#xff0c;以其简单优雅的 API 和灵活性受到开发者的喜爱。在开发复杂应用时&#xff0c;动态组件渲染是一项极其重要的技术&#xff0c;它能够在页面中动态地加载或切换组件&#xff0c;从而显著提升应用的灵活性与用户体验。…

RHCE的基本学习路线

RHCE的基本学习&#xff1a; 系统配置与管理 文件和目录管理&#xff1a;在执行文件移动或复制操作时&#xff0c;注意保留文件原有的权限和属性&#xff0c;可使用cp -p、mv -p等参数。另外&#xff0c;对于一些系统关键目录&#xff0c;如/etc、/bin等&#xff0c;非必要情…

LangChain学习笔记2 Prompt 模板

安装 langchain 库 pip install langchain1、概念&#xff1a;提示和提示工程 在大语言模型&#xff08;LLMs&#xff09;时代&#xff0c;通过简单地更改提示中的指令&#xff0c;同一个模型可以执行多种任务。这一特性让 LLMs 在各类应用场景中都显得非常灵活和强大。然而&…