代码学习第32天---动态规划

news2024/12/22 22:42:19

随想录日记part32

t i m e : time: time 2024.03.30



主要内容:今天开始要学习动态规划的相关知识了,今天的内容主要涉及两个方面:
不同路径 ; 不同路径 II。

  • 62.不同路径
  • 63. 不同路径 II


动态规划五部曲:
【1】.确定dp数组以及下标的含义
【2】.确定递推公式
【3】.dp数组如何初始化
【4】.确定遍历顺序
【5】.举例推导dp数组

Topic1不同路径

题目:

一个机器人位于一个 m ∗ n m *n mn 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
在这里插入图片描述

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

思路:

按照上面的五个步骤给出下面的代码:
代码如下:

class Solution {
    public int uniquePaths(int m, int n) {
        // 【1】dp[m][n]表示到(m,n)总走法
        int[][] dp = new int[m + 1][n + 1];
        // 【3】初始化
        for (int i = 1; i <= n; i++) {
            dp[1][i] = 1;
        }
        for (int i = 1; i <= m; i++) {
            dp[i][1] = 1;
        }
        for (int i = 2; i <= m; i++) {
            for (int j = 2; j <= n; j++) {
                // 【2】.确定递推公式
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
            }
        }
        return dp[m][n];
    }
}

时间复杂度 O ( m × n ) O(m × n) O(m×n)
空间复杂度 O ( m × n ) O(m × n) O(m×n)



Topic2不同路径||

题目:

一个机器人位于一个 m x n m x n mxn 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?
网格中的障碍物和空位置分别用 1 和 0 来表示。
在这里插入图片描述

输入: o b s t a c l e G r i d = [ [ 0 , 0 , 0 ] , [ 0 , 1 , 0 ] , [ 0 , 0 , 0 ] ] obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]] obstacleGrid=[[0,0,0],[0,1,0],[0,0,0]]
输出: 2 2 2
解释:
3x3 网格的正中间有一个障碍物。
从左上角到右下角一共有 2 条不同的路径:
【1】 向右 -> 向右 -> 向下 -> 向下
【2】 向下 -> 向下 -> 向右 -> 向右
思路:

按照上面的五个步骤给出下面的代码,在注释中给出具体的思路:
整体代码如下:

class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        // 【1】dp[m][n]表示到(m,n)总走法
        int m = obstacleGrid.length;
        int n = obstacleGrid[0].length;
        int[][] dp = new int[m][n];
        // 【3】.dp数组如何初始化
        int flag = 0;
        for (int i = 0; i < m; i++) {
            if (obstacleGrid[i][0] == 1 && flag == 0) {
                dp[i][0] = -1;
                flag = 1;
            } else if (obstacleGrid[i][0] == 0 && flag == 0)
                dp[i][0] = 1;
            else if (obstacleGrid[i][0] == 0 && flag == 1)
                dp[i][0] = 0;
            else
                dp[i][0] = -1;

        }
        flag = 0;
        for (int i = 0; i < n; i++) {
            if (obstacleGrid[0][i] == 1 && flag == 0) {
                dp[0][i] = -1;
                flag = 1;
            } else if (obstacleGrid[0][i] == 0 && flag == 0)
                dp[0][i] = 1;
            else if (obstacleGrid[0][i] == 0 && flag == 1)
                dp[0][i] = 0;
            else
                dp[0][i] = -1;
        }
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                if (obstacleGrid[i][j] == 1)
                    dp[i][j] = -1;
                else {
                    if (dp[i - 1][j] < 0 && dp[i][j - 1] < 0)
                        dp[i][j] = 0;
                    else if (dp[i - 1][j] < 0)
                        dp[i][j] = dp[i][j - 1];
                    else if (dp[i][j - 1] < 0)
                        dp[i][j] = dp[i - 1][j];
                    else
                        dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
                }
            }
        }
        if (dp[m - 1][n - 1] < 0)
            return 0;
        return dp[m - 1][n - 1];
    }
}

时间复杂度 O ( m × n ) O(m × n) O(m×n)
空间复杂度 O ( m × n ) O(m × n) O(m×n)



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

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

相关文章

Linux学习之软硬链接及动静态库

前言&#xff1a;在之前的文章http://t.csdnimg.cn/Lru5Thttp://t.csdnimg.cn/Lru5T 我们已经对Linux 系统里面的文件具有一定的理解了&#xff0c;现在我们将继续学习Linux里面的软硬连接和动静态库&#xff0c;这些是Linux里面的一些重要内容。 目录 一&#xff0c;文件管…

基于Givens旋转完成QR分解进而求解实矩阵的逆矩阵

基于Givens旋转完成QR分解进而求解实矩阵的逆矩阵 目录 前言 一、Givens旋转简介 二、Givens旋转解释 三、Givens旋转进行QR分解 四、Givens旋转进行QR分解数值计算例子 五、求逆矩阵 六、MATLAB仿真 七、参考资料 总结 前言 在进行QR分解时&#xff0c;HouseHolder变换…

【opencv】教程代码 —features2D(5)旋转相机的基本全景拼接

基本全景拼接 panorama_stitching_rotating_camera.cpp 将第二张图像进行透视变换后与第一张图像拼接 #include <iostream> // 包含了一些用于输入输出的函数 #include <opencv2/core.hpp> // 包含了OpenCV核心库的一些常用类和函数 #include <opencv2/imgpro…

[leetcode] 46. 全排列

文章目录 题目描述解题方法dfsjava代码复杂度分析 相似题目 题目描述 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3]…

实验三智能手机互联网程序设计(微信程序方向)实验报告

实验目的和要求 请编写下方商品列表页面&#xff0c;展示商品名称和价格&#xff1b; 二、实验步骤与结果&#xff08;给出对应的代码或运行结果截图&#xff09; Index.WXML <view class"shop" wx:for"{{10}}"> <vie…

何從Microsoft下載Windows 10 最新版本的ISO

許多新手用戶不知道如何從Microsoft下載最新版本的Windows 10 ISO(32 位或 64 位)。在本指南中,我們將向您展示如何直接從Microsoft下載最新版本的Windows 10 ISO。請注意收藏以備不時之需哦。 您可能知道,除了幾個次要更新外,微軟每年都會向 Windows 10 發布兩個主要更新…

阿里云服务器ECS u1实例ecs.u1-c1m2.large性能测评

阿里云服务器u1是通用算力型云服务器&#xff0c;CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器&#xff0c;ECS通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xf…

Yarn的安装和使用(2):使用及问题解决

Yarn是JavaScript的依赖管理工具&#xff0c;它与npm类似&#xff0c;但提供了一些额外的性能优化和一致性保证。 Yarn的使用&#xff1a; 初始化项目&#xff1a; yarn init 此命令会引导您创建一个新的package.json文件&#xff0c;用于记录项目的元信息和依赖。 添加依赖&…

如何恢复已删除的 Office 文件

丢失了重要文件并需要将其找回&#xff1f;这些提示将帮助您立即恢复 Office 文档。 没有什么比无法访问您已经处理了几个小时的文档更令人沮丧的了。无论文件是否已损坏、删除或以其他方式丢失&#xff0c;都会感觉浪费了巨大的时间和精力。 幸运的是&#xff0c;使用 Micro…

Apache Hive的基本使用语法(一)

一、数据库操作 创建数据库 create database if not exists myhive;查看数据库 use myhive; desc database myhive;创建数据库并指定hdfs存储 create database myhive2 location /myhive2;删除空数据库&#xff08;如果有表会报错&#xff09; drop database myhive;…

ubuntu之搭建samba文件服务器

1. 在服务器端安装samba程序 sudo apt-get install samba sudo apt-get install smbclient 2.配置samba服务 sudo gedit /etc/samba/smb.conf 在文件末尾追加入以下配置 [develop_share] valid users ancy path /home/ancy public yes writable y…

Python文件操作命令

文件操作 我知道你最近很累&#xff0c;是那种看不见的、身体上和精神上的疲惫感&#xff0c;但是请你一定要坚持下去。就算无人问津也好&#xff0c;技不如人也好&#xff0c;千万别让烦躁和焦虑毁了你的热情和定力。别贪心&#xff0c;我们不可能什么都有&#xff0c;也别灰心…

亚信安全荣获2023年度5G创新应用评优活动两项大奖

近日&#xff0c;“关于2023 年度5G 创新应用评优活动评选结果”正式公布&#xff0c;亚信安全凭借在5G安全领域的深厚积累和创新实践&#xff0c;成功荣获“5G技术创新的优秀代表”和“5G应用创新的杰出实践”两项大奖。 面向异构安全能力的5G安全自动化响应系统 作为5G技术创…

【C语言】结构体详解(一)

目录 1、什么是结构体? 2、结构体成分 3、结构体变量的定义与初始化 3.1、结构体变量的三种定义方式 3.2、结构体变量的初始化 4、结构体成员的访问&#xff08;两种方式&#xff09; 4.1、直接访问 4.2、间接访问 5、结构的特殊声明 5.1、不完全声明&#xff08;匿…

白色微立体的智能界面,就喜欢这种简洁白净。

本次发一些微立体风格的智能家居界面&#xff0c;风格为微立体&#xff0c;也叫轻拟物风格&#xff0c;或者新拟态风格。

规划控制如何兼顾安全与舒适性

规划控制如何兼顾安全与舒适性 附赠自动驾驶学习资料和量产经验&#xff1a;链接 **导读&#xff1a;**自动驾驶技术研发对于“安全第一”的追求是毋庸置疑的&#xff0c;但是这中间可能就忽视了舒适性。 因此&#xff0c;今天我想给大家分享的是&#xff0c;自动驾驶研发如何…

探究ThreadLocal的魔数0x61c88647和Entry数组

探究ThreadLocal 下面有一个很重要的HASH_INCREMENT,他的值是0x61c88647 public class ThreadLocal<T> {/***ThreadLocals依赖于附加到每个线程的每线程线性探针哈希映射 (thread.threadLocals和inheritableThreadLocals)。ThreadLocal对象充当键&#xff0c;通过threa…

uniApp使用XR-Frame创建3D场景(4)金属度和粗糙度

上一篇讲解了如何在uniApp中创建xr-frame子组件并创建简单的3D场景。 这一篇我们讲解xr-frame中关于mesh网格材质的金属度和粗糙度的设置。 1.先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"> <xr-node visible"{…

Java使用数组实现栈、队列、堆

数组模拟栈&#xff1a; const int N 10010; // ******************** 栈 int stk[N], tt//tt是下标; // 插入 stk[k] x; // 删除 tt--; // 判断栈是否为空 if (tt > 0) not empty else empty // 栈顶 stk[tt]; // ******************** 队列 // 在队尾插入…

可视化图表:关系图,一图分清父子兄弟关系。

Hi&#xff0c;我是贝格前端工场的老司机&#xff0c;本文分享可视化图表设计的关系图设计&#xff0c;欢迎老铁持续关注我们。 在现代信息爆炸的时代&#xff0c;我们需要从庞大的数据中提取有用的信息和洞察。而可视化图表作为数据分析和展示的重要工具之一&#xff0c;被广泛…