代码随想录第三十四天(一刷C语言)|不同路径不同路径II

创作目的:为了方便自己后续复习重点,以及养成写博客的习惯。

一、不同路径

思路:参考carl文档

        机器人每次只能向下或者向右移动一步,机器人走过的路径可以抽象为一棵二叉树,叶子节点就是终点。

1、确定dp数组(dp table)以及下标的含义:dp[i][j] :表示从(0,0)出发,到(i, j) 有dp[i][j]条不同的路径。

2、确定递推公式:因为dp[i][j]只有这两个方向过来,dp[i][j] = dp[i - 1][j] + dp[i][j - 1]。

3、dp数组的初始化:从0,0到(i,0)只有一种走法,所以dp[i][0]都是1,同理dp[0][j]也是1。

4、确定遍历顺序:由递推公式知是从上到下,从左到右。

5、举例dp数组:自己举例m,n的值推导dp数组。

ledcode题目:https://leetcode.cn/problems/unique-paths/description/

AC代码:

//初始化dp数组
int **initDP(int m, int n) {
    //动态开辟dp数组
    int **dp = (int**)malloc(sizeof(int *) * m);
    int i, j;
    for(i = 0; i < m; ++i) {
        dp[i] = (int *)malloc(sizeof(int) * n);
    }

    //从0,0到i,0只有一种走法,所以dp[i][0]都是1,同理dp[0][j]也是1
    for(i = 0; i < m; ++i)
        dp[i][0] = 1;
    for(j = 0; j < n; ++j)
        dp[0][j] = 1;
    return dp;
}

int uniquePaths(int m, int n){
    //dp数组,dp[i][j]代表从dp[0][0]到dp[i][j]有几种走法
    int **dp = initDP(m, n);

    int i, j;
    //到达dp[i][j]只能从dp[i-1][j]和dp[i][j-1]出发
    //dp[i][j] = dp[i-1][j] + dp[i][j-1]
    for(i = 1; i < m; ++i) {
        for(j = 1; j < n; ++j) {
            dp[i][j] = dp[i-1][j] + dp[i][j-1];
        }
    }
    int result = dp[m-1][n-1];
    free(dp);
    return result;
}

二、不同路径II

思路:参考carl文档。

        与不同路径做对比。

1、确定dp数组(dp table)以及下标的含义:dp[i][j] :表示从(0,0)出发,到(i, j) 有dp[i][j]条不同的路径。

2、确定递推公式:因为dp[i][j]只有这两个方向过来,dp[i][j] = dp[i - 1][j] + dp[i][j - 1]。(i, j)如果是障碍应该保持初始状态为0。

3、dp数组的初始化:从0,0到(i,0)只有一种走法,所以dp[i][0]都是1,同理dp[0][j]也是1。

4、确定遍历顺序:由递推公式知是从上到下,从左到右。一旦遇到obstacleGrid[i][0] == 1的情况就停止dp[i][0]、dp[0][j]赋值的操作。

5、举例dp数组:自己举例m,n的值推导dp数组。

lecode题目:https://leetcode.cn/problems/unique-paths-ii/description/

AC代码:

//初始化dp数组
int **initDP(int m, int n, int** obstacleGrid) {
    int **dp = (int**)malloc(sizeof(int*) * m);
    int i, j;
    //初始化每一行数组
    for(i = 0; i < m; ++i) {
        dp[i] = (int*)malloc(sizeof(int) * n);
    }

    //先将第一行第一列设为0
    for(i = 0; i < m; ++i) {
        dp[i][0] = 0;
    }
    for(j = 0; j < n; ++j) {
        dp[0][j] = 0;
    }

    //若碰到障碍,之后的都走不了。退出循环
    for(i = 0; i < m; ++i) {
        if(obstacleGrid[i][0]) {
            break;
        }
        dp[i][0] = 1;
    }
    for(j = 0; j < n; ++j) {
        if(obstacleGrid[0][j])
            break;
        dp[0][j] = 1;
    }
    return dp;
}

int uniquePathsWithObstacles(int** obstacleGrid, int obstacleGridSize, int* obstacleGridColSize){
    int m = obstacleGridSize, n = *obstacleGridColSize;
    //初始化dp数组
    int **dp = initDP(m, n, obstacleGrid);

    int i, j;
    for(i = 1; i < m; i++) {
        for(j = 1; j < n;j++) {
            //若当前i,j位置有障碍
            if(obstacleGrid[i][j])
                //路线不同
                dp[i][j] = 0;
            else
                dp[i][j] = dp[i-1][j] + dp[i][j-1];
        }
    }
    //返回最后终点的路径个数
    return dp[m-1][n-1];
}

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

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

相关文章

SwitchHosts - 管理、切换多个 hosts 方案的工具

一、hosts文件 简单的说&#xff0c;hosts文件是用于本地dns服务的&#xff0c;采用ip 域名的格式写在一个文本文件当中&#xff0c;Hosts是一个没有扩展名的系统文件&#xff0c;可以用记事本等工具打开&#xff0c;其作用就是将一些常用的网址域名与其对应的IP地址建立一个关…

Day63力扣打卡

打卡记录 寻找最近的回文数&#xff08;模拟&#xff09; 链接 class Solution:def nearestPalindromic(self, n: str) -> str:m len(n)candidates [10 ** (m - 1) - 1, 10 ** m 1]selfPrefix int(n[:(m 1) // 2])for x in range(selfPrefix - 1, selfPrefix 2):y …

JVM基础扫盲

什么是JVM JVM是Java设计者用于屏蔽多平台差异&#xff0c;基于操作系统之上的一个"小型虚拟机"&#xff0c;正是因为JVM的存在&#xff0c;使得Java应用程序运行时不需要关注底层操作系统的差异。使得Java程序编译只需编译一次&#xff0c;在任何操作系统都可以以相…

【【深入浅出了解IIC协议】】

深入浅出了解IIC协议 SCL &#xff1a; 传输时钟信号 SDA &#xff1a; 传输数据信号 1.空闲状态 &#xff1a; SDA 与 SCL都处于高电平 2.起始状态 &#xff1a; 在SCL为高的时候 主设备控制 SDA 从1 到 0 在进入起始位之后&#xff0c;我们把SCL翻转 从设备开始等待主机传…

【RTOS学习】源码分析(通用队列 队列 队列集)

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《RTOS学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 前面本喵讲解了和任务相关的FreeRTOS源码&#xff0c;进行再来介绍一下用于任务间通信的几种数据结…

数组中的某值,添加到数组的对象中成为新的数组

如图所示 我想要这个数组的第二项time在第一项的里面赋值新key 以此类推 window.KaTeX parse error: Expected }, got EOF at end of input: …dTime window.dayjs().add(1, ‘day’).format(‘YYYY-MM-DD 00:00:00’) v.runState 4 // 最后一个时间截止后无法预估后续的状态…

教师多大年龄退休

老师们&#xff0c;你们知道吗&#xff1f;教师这个职业有一个特别的“退休年龄”。 教师是一个特殊的职业。不仅传授知识&#xff0c;还关心每一个学生的成长&#xff0c;用爱和耐心陪伴他们走过人生的每一个阶段。正是因为教师的工作如此重要&#xff0c;他们的工作年限也是有…

数据分析场景下,企业大模型选型的思路与建议

来源/作者&#xff1a;爱分析 随着大模型带来能力突破&#xff0c;让AI与数据分析相互结合&#xff0c;使分析结果更好支撑业务&#xff0c;促进企业内部数据价值释放&#xff0c;成为了当下企业用户尤为关注的话题。本次分享主要围绕数据分析场景下大模型底座的选型思路&#…

【海报】新年海报 制作

准备一张写好文字的图片。 模型&#xff1a; 电商\lofi_v4.safetensors [9462506675] best quality,masterpiece,8k,(soft lighting:1.2),firecrackers,Chinese new year,<lora:全网首发丨新年红包封面_v1.0:1>, 虚假&#xff0c;不真实&#xff0c;绘画&#xff0c;线条…

Rust语言基础语法使用

1.安装开发工具: RustRover JetBrains: Essential tools for software developers and teams 下载: RustRover: Rust IDE by JetBrains 下载成功后安装并启动RustRover 安装中文语言包插件 重启RustRover生效

在GeoScene产品中发布海图服务——以s57数据标准为例

在GeoScene产品中发布海图服务——以s57数据标准为例1、海图服务部署 GeoScene_Maritime_for_Server海图模块安装完之后&#xff0c;需要在server里面注册海图soe和授权海图许可&#xff0c;如下&#xff1a; 步骤&#xff1a;点击“添加扩展”&#xff0c;从GeoScene_Maritime…

开源微信商城新零售网店,多商户小程序

源码介绍 小玄猪商城是一套基于前后端分离的B2B2C商城系统&#xff0c;支持微信小程序、支付宝小程序、H5商城、APP商城。支持多商户入驻、适用于直播商城、社交电商、团购、拼团、秒杀、砍价、活动报名、客户管理、知识付费、积分商城、抽奖活动、会员卡、权益卡、成长值、预…

1U、2U、4U和42U服务器,看完秒懂!

晚上好&#xff0c;我的网工朋友。 服务器是一个很广泛的概念&#xff0c;涵盖了各种类型和规格的计算机&#xff0c;用于提供各种网络和数据服务。 而机架服务器是当前数据中心和专业计算环境中&#xff0c;使用最为广泛的服务器类型之一。 机架式服务器的外形看来不像计算…

redis:二、缓存击穿的定义、解决方案(互斥锁、逻辑过期)的优缺点和适用场景、面试回答模板和缓存雪崩

缓存击穿的定义 缓存击穿是一种现象&#xff0c;具体就是某一个数据过期时&#xff0c;恰好有大量的并发请求过来&#xff0c;这些并发的请求可能会瞬间把DB压垮。典型场景就是双十一等抢购活动中&#xff0c;首页广告页面的数据过期&#xff0c;此时刚好大量用户进行请求&…

【QT Visual Studio环境配置】error MSB8020: 无法找到 v141/v142 的生成工具(完整版)

首先要了解V**平台工具集根据你安装的Visual Studio版本不同而有所区别&#xff0c;知道这个就容易解决问题了&#xff0c;确定你安装的那个版本&#xff0c;需要使用哪个工具集。 v143–>VS2022v142–>VS2019v141–>VS2017v140–>VS2015v120–>VS2013 一、解决…

uniapp:使用fixed定位,iOS平台的安全区域问题解决

manifest.json > 添加节点 "safearea": { //iOS平台的安全区域"background": "#1C1E22","backgroundDark": "#1C1E22", // HX 3.1.19支持"bottom": {"offset": "auto"} },已解决&#xff…

数据库操作习题12.12

考虑如下的人员数据&#xff0c;其中加下划线的是主码&#xff0c;数据库模式由四个关系组成: employee (empname, street, city) works (empname, compname, salary) company(id, compname, city) managers (empname, mgrname) 其中 关系 employee 给出人员的基本信息,包括人员…

issue queue的实现方式

主要从一下几个点进行考虑&#xff1a; 集中式&#xff08;Centrallized&#xff09;或者分布式(Distributed)&#xff1b;压缩式&#xff08;Compressing&#xff09;或者非压缩式(Non-compressing)&#xff1b;数据捕捉的方式&#xff08;Data-capture&#xff09;或者非数据…

Ubuntu系统使用Nginx搭建RTMP服务器

环境&#xff1a; 推流端 rockpi s 主控rk3308 运行ubuntu系统 服务端 ubuntu 播放器 VLC播放器 服务端安装依赖&#xff1a; apt-get install build-essential libpcre3 libpcre3-dev libssl-dev创建nginx编译目录&#xff1a; mkdir my_nginx_rtmp cd my_nginx_rtmp/下载 …

Linux性能调优技术概览

Linux性能调优技术概览 概述 这里的Linux性能调优主要是关于Linux系统上程序的性能跟踪&#xff0c;因为只有收集到足够的准确的性能数据才能找到程序和系统的性能瓶颈。Linux性能调优的原理、框架、工具等内容包括三个方面&#xff1a; 信息源 通常是以“事件”的形式&#…