代码随想录第三十四天(一刷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]也是1for(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);}//先将第一行第一列设为0for(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;elsedp[i][j] = dp[i-1][j] + dp[i][j-1];}}//返回最后终点的路径个数return dp[m-1][n-1];
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

饥荒Mod 开发(十一):修改物品堆叠

饥荒Mod 开发(十)&#xff1a;制作一把AOE武器 饥荒Mod 开发(十二)&#xff1a;一键制作 饥荒中物品栏有限&#xff0c;要拾取的物品有很多&#xff0c;经常装不下要忍痛丢掉各种东西&#xff0c;即使可以将物品放在仓库但是使用不方便&#xff0c;所以可以将物品的堆叠个数设…

优质全套SpringMVC教程

三、SpringMVC 在SSM整合中&#xff0c;MyBatis担任的角色是持久层框架&#xff0c;它能帮我们访问数据库&#xff0c;操作数据库 Spring能利用它的两大核心IOC、AOP整合框架 1、SpringMVC简介 1.1、什么是MVC MVC是一种软件架构的思想&#xff08;不是设计模式-思想就是我们…

深度学习中的潜在空间

1 潜在空间定义 Latent Space 潜在空间&#xff1a;Latent &#xff0c;这个词的语义是“隐藏”的意思。“Latent Space 潜在空间”也可以理解为“隐藏的空间”。Latent Space 这一概念是十分重要的&#xff0c;它在“深度学习”领域中处于核心地位&#xff0c;即它是用来学习…

适用于 Windows 和 Mac 的 10 款最佳照片恢复软件(免费和付费)

丢失照片很容易。这里点击错误&#xff0c;那里贴错标签的 SD 卡&#xff0c;然后噗的一声&#xff0c;一切都消失了。值得庆幸的是&#xff0c;在技术领域&#xff0c;你可以纠正一些错误。其中包括删除数据或格式化错误的存储设备。 那么&#xff0c;让我们看看可用于从 SD …

docker文档转译1

写在最前面 本文主要是转译docker官方文档。主题是Docker overview&#xff0c;这里是链接 Docker概述 Docker是一个用于开发、发布和运行应用程序的开放平台。Docker使你能够将应用程序与基础设施分离&#xff0c;从而可以快速交付软件。你可以使用相同的方法像管理应用程序…

机器视觉技术与应用实战(开运算、闭运算、细化)

开运算和闭运算的基础是膨胀和腐蚀&#xff0c;可以在看本文章前先阅读这篇文章机器视觉技术与应用实战&#xff08;Chapter Two-04&#xff09;-CSDN博客 开运算&#xff1a;先腐蚀后膨胀。开运算可以使图像的轮廓变得光滑&#xff0c;具有断开狭窄的间断和消除细小突出物的作…

CentOS 7 部署 Nacos-2.3.0 (单机版)

CentOS 7 部署 Nacos-2.3.0 &#xff08;单机版&#xff09; 1. 下载 Nacos 安装包 历史版本&#xff1a;https://github.com/alibaba/nacos/releases/ 我选的是 2.3.0 版本&#xff0c;https://github.com/alibaba/nacos/releases/download/2.3.0/nacos-server-2.3.0.tar.g…

万兆网络之屏蔽线序接法(下)

我们直接干吧 1.剥去网线外被&#xff0c;这个相信大家都会的&#xff0c;剪掉尼龙线 剥去的长度用水晶头和护套量度&#xff0c;多留一点长度用于撸直 为了插进去很紧&#xff0c;我用的是超五类的护套&#xff0c;只能顶到条纹底端就很费劲了 然后十字骨架留一小段&#xf…

机器学习笔记 - 时间序列分析基础概念解释

一、简述 时间序列分析是一种统计方法,可检查定期收集的数据点以揭示潜在的模式。该技术与各个行业高度相关,因为它可以根据历史数据做出决策和预测。通过了解过去并预测未来,时间序列分析在金融、医疗保健、能源、供应链管理、天气预报、营销等领域发挥着至关重要的作用。 …

【经典LeetCode算法题目专栏分类】【第4期】BFS广度优先算法:单词接龙、最小基因变化、二进制矩阵中的最短路径

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 一般涉及到最小层数问题…

7.实现任务的rebalance

1.设计 1.1 背景 系统启动后&#xff0c;所有任务都在被执行&#xff0c;如果这时某个节点宕机&#xff0c;那它负责的任务就不能执行了&#xff0c;这对有稳定性要求的任务是不能接受的&#xff0c;所以系统要实现rebalance的功能。 1.2 设计 下面是Job分配与执行的业务点…

高通平台开发系列讲解(AI篇)如何让MTCNN运行在SNPE

文章目录 一、使用到的工具1.1、SNPE特点1.2、SNPE特点二、环境配置2.1、Snpe的环境配置2.2、opencv的环境配置2.3、caffe的环境配置三、MTCNN网络组成四、基于SNPE运行MTCNN沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要介绍如何使用高通平台SNPE运行MTCN…