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

2023-12-18 03:52

本文主要是介绍代码随想录第三十四天(一刷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];
}

这篇关于代码随想录第三十四天(一刷C语言)|不同路径不同路径II的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/506952

相关文章

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的