【动态规划】Leetcode 62. 不同路径I 63. 不同路径II

【动态规划】Leetcode 62. 不同路径I 63. 不同路径II

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

---------------🎈🎈62. 不同路径I 题目链接🎈🎈-------------------
---------------🎈🎈63. 不同路径II 题目链接🎈🎈-------------------

Leetcode 62. 不同路径I

😒: 我的代码实现============>

动规五部曲

✒️确定dp数组以及下标的含义

dp[i][j] :表示从(0 0)出发,到(i, j) 有 dp[i][j] 条不同的路径。

✒️确定递推公式

dp[i][j] = dp[i-1][j] + dp[i][j-1]

✒️dp数组初始化

初始化第1行都赋予 1, 初始化第1列都赋予 1

✒️确定遍历顺序

从左往右 从上往下(初始数值在左边和上面,利用左边和上面的数进行推导)

✒️举例推导dp数组

在这里插入图片描述

时间复杂度O(M×N)
空间复杂度O(M×N)

📘代码


class Solution {
    public int uniquePaths(int m, int n) {

        // dp数组 dp[i][j] 走到i,j的不同路径的个数
        int[][] dp  = new int[m][n];

        // 初始化第1行都赋予 1
        for(int i = 0; i < n; i++){
            dp[0][i] = 1;
        }

        // 初始化第1列都赋予 1
        for(int i = 0; i < m; i++){
            dp[i][0] = 1;
        }

        // 递推表达式:dp[i][j] = dp[i-1][j] + dp[i][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];
    }
}           

Leetcode 63. 不同路径II

😒: 我的代码实现============>

动规五部曲

✒️确定dp数组以及下标的含义

dp[i][j] :表示从(0 0)出发,到(i, j) 有 dp[i][j] 条不同的路径。

✒️确定递推公式

dp[i][j] = dp[i-1][j] + dp[i][j-1],遇到障碍则置为零

✒️dp数组初始化

初始化第1行都赋予 1, 初始化第1列都赋予 1。遇到障碍则后面的全为0

✒️确定遍历顺序

从左往右 从上往下(初始数值在左边和上面,利用左边和上面的数进行推导)

✒️举例推导dp数组,中间是障碍

时间复杂度O(M×N)
空间复杂度O(M×N)

📘代码

class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        //获取行数 列数
        int row = obstacleGrid.length;
        int col = obstacleGrid[0].length;

		// dp数组dp[i][j] :表示从(0 0)出发,到(i, j) 有 dp[i][j] 条不同的路径
        int[][] dp = new int[row][col];

        // 如果开始和结束有障碍 那就直接返回0
        if(obstacleGrid[0][0] == 1 || obstacleGrid[row-1][col-1]==1) return 0;

        // 初始化dp数组,第一行第一列为1,如果有障碍那后面的就都是0
        // 初始化第一行
        for(int i = 0; i < col; i++){
            if(obstacleGrid[0][i] != 1){
                dp[0][i] = 1;
            }
            else{
                break;
            }
        }
        // 初始化第一列
        for(int i = 0; i < row; i++){
            if(obstacleGrid[i][0] != 1){
                dp[i][0] = 1;
            }
            else{
                break;
            }
        }

		// 递推,当有障碍的时候为0,无障碍 dp[i][j] = dp[i-1][j] + dp[i][j-1]
        for(int i = 1; i < row; i++){
            for (int j = 1; j < col; j++){
                if(obstacleGrid[i][j] != 1){
                    dp[i][j] = dp[i-1][j] + dp[i][j-1];
                }
                else{
                    dp[i][j]=0;
                }
                
            }
        }
        return dp[row-1][col-1];
    }
}         

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【YOLOv5改进系列(7)】高效涨点----使用yolov8中的C2F模块替换yolov5中的C3模块

文章目录 &#x1f680;&#x1f680;&#x1f680;前言一、1️⃣ C3模块和C2F模块详解1.1 &#x1f393; C3模块1.2 ✨BottleNeck模块1.3 ⭐️C2F模块 二、2️⃣添加C2f和C2F_Bottleneck模块代码三、3️⃣新建yolov5s_C2F.yaml文件四、4️⃣修改yolo.py中的parse_model函数五…

Collction的三种遍历

目录 集合体系结构 迭代器遍历&#xff1a; 增强for遍历&#xff1a; Lambda表达式遍历 集合体系结构 List 系列集合 &#xff1a; 添加元素是有序的、可重复的&#xff0c;有索引的&#xff1b; 有序的&#xff1a;存和取的顺序是一样的&#xff1b; Set 系列集合 &#…

综合实验1

一、配置IP地址 [AR1]int g0/0/0 [AR1-GigabitEthernet0/0/0]ip add 192.168.1.254 24 [AR1-GigabitEthernet0/0/0]int se4/0/0 [AR1-Serial4/0/0]ip add 15.1.1.1 24 [AR1-Serial4/0/0] [AR2]int g0/0/0 [AR2-GigabitEthernet0/0/0]ip add 192.168.2.254 24 [AR2-Giga…

Sui与Revolut合作,加速Sui区块链教育和采用

作为全球一体化金融平台&#xff0c;Revolut与Sui合作推出了最新的加密货币学习课程。Revolut拥有全球超过4,000万用户&#xff0c;提供一系列数字银行产品和服务&#xff0c;包括购买和出售加密货币&#xff0c;其中包括SUI。 Revolut的学习计划为其用户提供有关Sui的教育&am…

蓝桥杯嵌入式学习笔记(7):ADC程序设计

目录 前言 1. ADC原理 1.1 主要特性 1.2 模拟输出电路图 2. 使用CubeMX进行源工程的配置 2.1 引脚配置 2.2 配置AD1 2.3 配置AD2 2.4 配置时钟 3. 代码编程 3.1 预备工作 3.2 bsp_adc.h文件编写 3.3 bsp_adc.c文件编写 3.4 main.c编写 3.4.1 时钟函数配置 3…

java子集(力扣Leetcode78)

子集 力扣原题链接 问题描述 给定一个整数数组 nums&#xff0c;数组中的元素互不相同。返回该数组所有可能的子集&#xff08;幂集&#xff09;。解集不能包含重复的子集。可以按任意顺序返回解集。 示例 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#x…

python3将exe 转支持库错误 AssertionError: None does not smell like code

exe -> pyc包(*.exe_extracted) 安装反编译工具 exe反编译工具&#xff1a;pyinstxtractor.py下载&#xff1a;https://sourceforge.net/projects/pyinstallerextractor/ python pyinstxtractor.py hello.exe包反编译 懒的写&#xff01;&#xff01;&#xff01; 这有详…

英语广场期刊投稿发表论文

《英语广场》是由国家新闻出版总署批准的正规期刊&#xff0c;杂志本着“轻松读原作&#xff0c;快乐学英语”的宗旨&#xff0c;倡导“寓学于乐”的学习理念&#xff0c;其活泼的办刊风格和优秀的文章选材受到读者特别是广大中学生的广泛欢迎&#xff0c;取得了良好的社会效益…

redis 的设计与实现(三)——对象

1. 前言&#xff1a; 在第一章节我们了解到了&#xff0c;redis底层所涉及的数据结构&#xff0c;但是这并非是离我们最近的一层&#xff0c;在此之上&#xff0c;redis实现了一层对象与我们交互。我们在本篇内容中将了解到&#xff1a; 对象对应的实现redis一些常用特性的实现…

数字化坚鹏:小熊电器面向数字化转型的大数据顶层设计实践培训

小熊电器面向数字化转型的大数据顶层设计实践培训圆满结束 ——努力打造“数据技术营销”三轮驱动的数字化领先企业 小熊电器股份有限公司由李一峰创立于2006年&#xff0c;是一家专业从事创意小家电研发、设计、生产和销售的实业型企业。2019年8月23日正式在深交所挂牌上市。…

rust使用Command库调用cmd命令或者shell命令,并支持多个参数和指定文件夹目录

想要在不同的平台上运行flutter doctor命令&#xff0c;就需要知道对应的平台是windows还是linux&#xff0c;如果是windows就需要调用cmd命令&#xff0c;如果是linux平台&#xff0c;就需要调用sh命令&#xff0c;所以可以通过cfg!实现不同平台的判断&#xff0c;然后调用不同…

【21-40】操作系统基础知识(非常详细)从零基础入门到精通,看完这一篇就够了

【21-40】操作系统基础知识&#xff08;非常详细&#xff09;从零基础入门到精通&#xff0c;看完这一篇就够了 以下是本文参考的资料 欢迎大家查收原版 本版本仅作个人笔记使用44、程序从堆中动态分配内存时&#xff0c;虚拟内存上怎么操作的45、常见的几种磁盘调度算法1. 先来…

codesys通过moudbus TCP连接西门子1214c,西门子做客户端

思路在codesys中发送数据到西门子&#xff0c;西门子原封不动的将数据传回。 1.首先配置codesys; 我设置了500个&#xff0c;但是好像发不这么多&#xff0c;只能120多个。因为什么来我忘了。但是这里不影响。 2.配置映射&#xff1a; 3.写代码 PROGRAM PLC_PRG VARarySendDa…

URL编码:原理、应用与安全性

title: URL编码&#xff1a;原理、应用与安全性 date: 2024/3/29 18:32:42 updated: 2024/3/29 18:32:42 tags: URL编码百分号编码特殊字符处理网络安全应用场景标准演变未来发展 在网络世界中&#xff0c;URL&#xff08;统一资源定位符&#xff09;是我们访问网页、发送请求…

Laya1.8.4 UI长按选择对应位置释放技能

需求&#xff1a; 需要实现拖拽摇杆选择技能释放位置&#xff0c;释放技能。 原理&#xff1a;首先拆分需求&#xff0c;分为两部分&#xff0c;UI部分和场景部分&#xff0c;UI部分需要实现长按效果&#xff0c;长按后又要有拖动效果&#xff0c;将官方文档的示例代码改了改…

HANA-公司间销售ICS-IDOC系统配置-保姆级配置文档

HANA公司间销售ICS-IDOC系统配置—保姆级配置文档 在项目实施过程中经常会遇到关联方交易的问题,有公司间采购的业务场景,也会存在公司间销售的业务场景,本文将着重讲解公司间销售在SAP系统中的实现场景。很多公司会在香港设置一个公司用于对外的销售接单,然后将接到的销售…

企业微信知识库:从了解到搭建的全流程

你是否也有这样的疑惑&#xff1a;为什么现在的企业都爱创建企业微信知识库&#xff1f;企业微信知识库到底有什么用&#xff1f;如果想要使用企业微信知识库企业应该如何创建&#xff1f;这就是我今天要探讨的问题&#xff0c;感兴趣的话一起往下看吧&#xff01; | 为什么企业…

小白python爬虫基础教程(看这一篇就完了)

爬虫的五个步骤&#xff1a; 1&#xff09;需求分析&#xff0c;找到需求相关的网址 2&#xff09;获取网址的返回信息&#xff08;urllib,requests&#xff09; 3&#xff09;定位需要的信息所在位置&#xff08;re正则表达式,XPATH, CSS selector&#xff09; 4&#xff…

argo rollout使用

一、前言 argorollout是比argocd更高级的发布工具&#xff0c;其中包含自动化金丝雀发布、自动化蓝绿发布、还可以通过argo命令或者dashboard查看发布的过程 二、使用 需要先部署argo rollout服务 参考&#xff1a;https://github.com/argoproj/argo-rollouts/tree/master/m…

关于web_server项目的学习记录(自用)

主要参考资料&#xff1a; 我在地铁吃闸机 基础处理框架&#xff1a;Multi-reactor muduo库有三个核心组件实现持续监听reactor的fd&#xff1a;channel;epoll/poller/eventloop类 channel 事件监听器epoll_ctl监听到了fd发生了什么事件,channel类会封装每个fd和fd感兴趣的事…