代码随想录:动态规划6-10

news2025/2/5 17:55:56

62、不同路径

题目

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

问总共有多少条不同的路径?

示例 1:

输入:m = 3, n = 7
输出:28

代码

class Solution {
    public int uniquePaths(int m, int n) {
        int[][] dp = new int[m][n]; //dp[i][j]表示走到该网格有几种路径

        //dp数组初始化,最上面和最左面要初始为1
        for(int i=0; i < m; i++){
            dp[i][0] = 1;
        }
        for(int j=0; j < n; j++){
            dp[0][j] = 1;
        }

        //遍历顺序:从左向右+从上到下
        for(int i=1; i < m ; i++){
            for(int j=1; j < n; j++){
                //该网格的路径=上面+左边之和
                dp[i][j] = dp[i-1][j] + dp[i][j-1]; 
            }
        }
        return dp[m-1][n-1]; //返回最右下角的网格
    }
}

63、不同路径II

题目

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。

现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?

网格中的障碍物和空位置分别用 1 和 0 来表示。

示例 1:

输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]
输出:2
解释:3x3 网格的正中间有一个障碍物。
从左上角到右下角一共有 2 条不同的路径:
1. 向右 -> 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右 -> 向右

代码

class Solution {
    //有障碍的初始化区别:网格有障碍,右边和下面的就不初始化1,默认0了
    //有障碍的递推区别:有障碍的不能用递推公式,默认=0
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int m = obstacleGrid.length; //行数
        int n = obstacleGrid[0].length; //列数

        int[][] dp = new int[m][n];  //dp[i][j]表示走到这个网格的路径个数

        //dp数组初始化:无障碍左边和上面全为1,有障碍,不处理后面默认全为0
        for(int i=0; i < m && obstacleGrid[i][0] == 0; i++){
           dp[i][0] = 1;
        }
        for(int j=0; j < n && obstacleGrid[0][j] == 0; j++){
            dp[0][j] = 1;
        }

        //遍历顺序:从上往下+从左往右
        for(int i=1; i < m; i++){
            for(int j=1; j < n; j++){
                //无障碍=左边+上面之和
                if(obstacleGrid[i][j] == 0){
                    dp[i][j] = dp[i-1][j] + dp[i][j-1];
                }
                //有障碍,该网格不能走,路径直接归零
                else{
                    dp[i][j] = 0;
                }
            }
        }
        return dp[m-1][n-1]; //返回左下角
    }
}

343、整数拆分

题目

给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。

返回 你可以获得的最大乘积 。

示例 1:

输入: n = 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。

示例 2:

输入: n = 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。

代码

class Solution {
    public int integerBreak(int n) {
        int[] dp = new int[n+1]; //dp[i]表示把i拆分的乘积最大值

        //dp数组初始化
        dp[1] = 0;  //0*1
        dp[2] = 1;  //1*1

        //遍历顺序,从3-n进行拆分,计算dp[i]
        for(int i=3; i <= n; i++){
            //对i进行拆分
            //用3举例:3=1+2/dp[2],3=2+1/dp[1]
            //用4举例:4=1+3/dp[3],4=2+2/dp[2],4=3+1/dp[1]
            for(int j=1; j < i; j++){
                int two = j * (i - j);  //把i拆成两数相乘
                int three = j * dp[i-j]; //把i拆成多数相乘
                //求max的时候dp[i]不能漏,因为two和three只是把i进行j的两种拆分,但不一定的dp[i]拆分的最大值
                dp[i] = Math.max(dp[i], Math.max(two, three));  //递推公式
            }
        }
        return dp[n];
    }
}

96、不同的二叉搜索树

题目

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。

示例 1:

输入:n = 3
输出:5

示例 2:

输入:n = 1
输出:1

代码

class Solution {
    public int numTrees(int n) {
        int[] dp = new int[n+1]; //dp[i]表示i个节点的二叉搜索树的个数

        //dp数组初始化
        dp[0] = 1;  //空树是一个二叉搜索树

        //遍历顺序:i从1-n分别计算二叉搜索树的个数dp[i]
        for(int i=1; i <= n; i++){
            //对i个节点进行拆分,以1为头结点-以i为头结点的情况分别求和,得到dp[i]
            for(int j=0; j < i; j++){

                //以i=3举例
                //dp[3] = 以1头结点+以2头结点+以3头结点
                //dp[3] = dp[0]*dp[2] + dp[1]*dp[1] + dp[2]*dp[0](左子树*右子树)
                
                int tmp = dp[j] * dp[i-1-j];  //递推公式
                dp[i] += tmp;
            }
        }
        return dp[n];  //返回n个节点的个数
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2056672.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于STM32开发的智能农业环境监控系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化传感器数据采集与处理环境控制与状态指示Wi-Fi通信与远程监控应用场景 农业温室环境管理农田环境监控与自动化管理常见问题及解决方案 常见问题解决方案结论 1. 引言 随着农业技术…

Codigger 视频会议(Meeting):制造业的高效协作引擎

在制造业数字化转型的浪潮中&#xff0c;企业面临着前所未有的机遇与挑战。视频会议作为一种高效的沟通工具&#xff0c;在制造业中发挥着关键作用。 制造业对于视频会议有着多方面的需求与挑战。不同生产基地往往分布在各地&#xff0c;跨地域协作需求十分迫切。在技术交流时&…

stm32—ADC

1. 什么是ADC 生活中我们经常会用到ADC这种器件&#xff0c;比如说&#xff0c;当我们在使用手机进行语音通信时&#xff0c;ADC器件会将我们的声信号转换为电信号 (模拟信号 ---> 数字信号) 模拟信号&#xff1a; 模拟信号是指用连续变化的物理量表示的信息&#xff0c;其信…

【Vue3】编程式路由导航

【Vue3】编程式路由导航 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日…

【Qt】 常用控件QLCDNumber

常用控件QLCDNumber QLCDNumber是一个专门用来显示数字的控件&#xff0c;类似于“老式计算机”的效果。 QLCDNumber的属性 属性说明 intValue QLCDNumber 显⽰的数字值(int). value QLCDNumber 显⽰的数字值(double). 和 intValue 是联动的. 例如给 value 设为 1.5, i…

C语言程序设计-练习篇

山海自有归期&#xff0c;风雨自有相逢。 一 下面代码的结果是什么&#xff1f; int main() { int i 0; for (i 0; i < 10; i) { if (i 5) //此处为赋值&#xff0c;i 5表达式结果为5 printf("%d ", i); //表达式为真&a…

AI 进阶实战 | 走进大模型(LLM)+智能体(Agent)+提示词(Prompt)

前言 人工智能&#xff08;AI&#xff09;不再只是科幻电影中的桥段&#xff0c;而是正以前所未有的速度改变着我们的世界。随着大规模语言模型&#xff08;LLM&#xff09;系列的崛起&#xff0c;结合高度智能的&#xff08;Agent&#xff09;与精心设计的&#xff08;Prompt…

topic交换机

topic交换机 是什么交换机模式 这个模式可以用点分割代表不同的消息类型 例如:有4种消息,其中我想发送china相关的消息,就china.#,指多个单词 我想发送各国的天气,就可以#.weather 优势 比directexchange相比更方便些 案例 创建队列 创建交换机 绑定 绑定关系已确认

macOS安装搭建python环境

安装Homebrew apt-get是一个常见于Debian和Ubuntu等基于Linux的操作系统中的包管理工具&#xff0c;用于安装、更新和移除软件包。然而&#xff0c;macOS使用的是Homebrew或者MacPorts等其他的包管理工具&#xff0c;并不使用apt-get。 如果你想在macOS上使用类似apt-get的功…

创建、使用、删除 数据库

一、创建数据库 1.1 使用DDL语句创建数据库 CREATE DATABASE 数据库名 DEFAULT CHARACTER SET 字符编码; 案例&#xff1a; 创建一个test 的数据库&#xff0c;并查看该数据库。 create database test default character set utf8; show databases; 1.2 使用Navicat创建数据库 …

快速排序的深入优化探讨

快排性能的关键点分析 决定快排性能的关键点是每次单趟排序后&#xff0c;key对数组的分割&#xff0c;如果每次选key基本⼆分居中&#xff0c;那么快排的递归树就是颗均匀的满⼆叉树&#xff0c;性能最佳。但是实践中虽然不可能每次都是⼆分居中&#xff0c;但是性能也还是可…

【电子信息工程大学生的职业准备策略指南】

电子信息工程是一个快速发展且应用广泛的领域&#xff0c;对于大学生来说&#xff0c;为未来的职业生涯做好准备是一项重要任务。 目录 一、扎实的专业知识基础 二、实践能力的培养 三、编程与软件开发技能 四、创新思维与解决问题的能力 五、专业认证与资格证书 六、实习…

Element UI中el-dialog作为子组件如何由父组件控制显示/隐藏~

1、这里介绍的是将el-dialog作为组件封装便于复用&#xff0c;如何通过父组件控制子组件dialog的显示与隐藏。 2、思路:首先el-dialog是通过dialogVisible的值是否为true或false来控制显示与隐藏的。那么我们可以通过父传子props来将true&#xff08;即showFlag的值&#xff0…

影刀RPA--如何获取网页当页数据?

&#xff08;1&#xff09;点击数据抓取-选择需要获取数据的地方-会弹出是否是获取整个表格&#xff08;当前页面&#xff09; &#xff08;2&#xff09;点击“是”&#xff1a;则直接获取整个表格数据-点击完成即可 &#xff08;3&#xff09;点击“否”&#xff1a;如果你想…

发那科机器人常见的异常解决方案

第一类错误&#xff1a;示教板空白、机器人死机 判断方法&#xff1a;1、PSU 上红色LED 亮代表电源供给报警&#xff0c;可能保险F4熔断、查看CP2、CP3线路&#xff08;200ACV输出&#xff09;、更换PSU&#xff1b;绿色PIN熄灭代表电源供给单元未获得200V 的交流电源输入&…

1.检查现场运行环境-《篮球比赛展示管理系统》现场管理员角色操作手册

篮球比赛现场PC电脑,充当管理端&#xff0c;内装的浏览器要求是Firefox、Chrome、Edge、Safari等最新版市场主流浏览器等。

SAP EWM PMR

目录 1 简介 2 业务流程 3 业务操作 4 主数据设置 4.1 ERP 主数据 4.2 EWM 主数据 5 后台配置 5.1 主数据 5.2 GI 流程 5.3 仓库内部移动流程 5.4 仓库任务设置 5.5 集成 5.6 EWM 链接 1 简介 EWM PMR 分 2 部分功能&#xff0c;第一是 MES-Driven Staging&#…

OSI七层网络模型 /TCP/IP五层模型以及封装分用的详细讲解

文章目录 协议分层的好处OSI七层网络模型TCP/IP五层网络模型网络设备所在的分层(重点)封装和分用 协议分层的好处 第一点&#xff1a; 在网络通信中&#xff0c;如果使用一个协议来解决所有的问题&#xff0c;那么这个协议就会非常的庞大&#xff0c;非常不利于去学习和理解&…

Ciallo~(∠・ω・ )⌒☆第二十二篇 入门request请求库使用

请求库是用于发送HTTP请求的工具。常见的请求库有requests&#xff0c;它是一个功能强大且易于使用的HTTP库。 使用requests库发送GET请求&#xff1a; import requests url "https://httpbin.org/get"# 携带get请求参数 params {"pn": 10,"size&q…

PyTorch的torchvision内置数据集使用,transform+pytorch联合使用

一、PyTorch的torchvision内置数据集介绍 我们前面的文章里谈到的数据集是我们自己找的一些自定义数据集。那么在Pytorch中存在2种数据集&#xff08;Dataset&#xff09;&#xff0c;即内置数据集&#xff08;Built-in dataset&#xff09;和自定义数据集&#xff08;Custom d…