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

news2025/1/11 5:51:38

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

一、不同路径

思路:参考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];
}

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

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

相关文章

高可用接入层技术演化及集群概述

集群概述 集群的介绍及优势 集群&#xff1a;将多台服务器通过硬件或软件的方式组合起来&#xff0c;完成特定的任务&#xff0c;而这些服务器对外表现为一个整体。集群的优势 高可靠性&#xff1a;利用集群管理软件&#xff0c;当主服务器故障时&#xff0c;备份服务器能够自…

为什么MCU在ADC采样时IO口有毛刺?

大家在使用MCU内部ADC进行信号采样一个静态电压时&#xff0c;可能在IO口上看到这样的波形。这个时候大家一般会认识是信号源有问题&#xff0c;但仔细观察会发现这个毛刺的频率是和ADC触发频率一样的。 那么为什么MCU在ADC采样时IO口会出现毛刺呢&#xff1f;这个毛刺对结果有…

APT80DQ60BG-ASEMI大电流二极管APT80DQ60BG

编辑&#xff1a;ll APT80DQ60BG-ASEMI大电流二极管APT80DQ60BG 型号&#xff1a;APT80DQ60BG 品牌&#xff1a;ASEMI 封装&#xff1a;TO-247 特性&#xff1a;插件、快恢复二极管 最大平均正向电流&#xff1a;80A 最大重复峰值反向电压&#xff1a;600V 恢复时间&am…

使用VBA快速统计词组词频(多单词组合)(2/2)

实例需求&#xff1a;产品清单如A列所示&#xff0c;现在如下统计多单词组合词组词频。 在上一篇博客中《使用VBA快速统计词组词频(多单词组合)&#xff08;1/2&#xff09;》讲解了如何实现双词的词频统计。 本文将讲解如何实现3词的词频统计&#xff0c;掌握实现方法之后&a…

从人的安全价值观看企业的安全发展

文章目录 每日一句正能量前言感受之一&#xff0c;安全价值观是体现个人人生价值的最高境界&#xff0c;是人与企业和谐发展的基本保障&#xff0c;也是企业安全发展的理论导向。感受之二&#xff0c;安全价值观是企业承担社会责任的主要表现&#xff0c;是体现企业价值的根基&…

容器技术:从虚拟机到轻量级容器的革命

一、引言 首先&#xff0c;什么是容器&#xff1f; 容器是一种沙盒技术&#xff0c;主要目的是为了将应用运行在其中&#xff0c;与外界隔离&#xff1b;及方便这个沙盒可以被转移到其它宿主机器。本质上&#xff0c;它是一个特殊的进程。通过名称空间&#xff08;Namespace&a…

Axure RP - 交互设计的强大引擎

目录 前言 1. 交互设计&#xff1a;连接用户与产品的纽带 2. 情景设计&#xff1a;预测用户行为的未来 3. 演示和共享&#xff1a;让设计活起来 我的其他博客 前言 在数字化时代&#xff0c;用户体验的重要性日益突显&#xff0c;而交互设计成为塑造产品与用户互动的关键。…

php-使用wangeditor实现富文本-遇见问题

一、在 PowerShell 中使用 npm install 命令时&#xff0c;命令行解析器可能会将 符号解释为特殊字符&#xff0c;导致出现错误。 报错 解决 方法一&#xff1a;使用反引号&#xff08;&#xff09;将包名括起来&#xff0c;以避免特殊字符的解析。修改命令为&#xff1a; …

对管理的一些思考

记得21年的时候&#xff0c;学习过《初探技术管理》&#xff0c;现在看来仍然是很有价值。 怎么判断自己是否有基础走上管理岗&#xff0c;我觉得最最基础的一点&#xff0c;是判断自己是否成为团队的主程。主程一般意味着对目前的系统有广泛、深入的了解&#xff0c;能够担任中…

VMWare Tools 共享目录设置

vmware tools安装完成后&#xff0c;进入到工项目录设置 点击虚拟机设置->硬件->CD/DVD(SATA) &#xff0c;勾选使用物理驱动器&#xff0c;勾选自动检测 1、windows 操作系统设置 设置共享文件夹时&#xff0c;需要勾选 “ 在windows客户机中映射为网络驱动器”。 设置…

From Human Attention to Computational Attention (1)

”is the taking possession by the mind, in clear and vivid form, of one out of what seem several simultaneously possible objects or trains of thought. It implies withdrawal from some things in order to deal effectively with others“&#xff0c;William Jame…

Python自动化测试之线上流量回放:分析、存储与本地化支持!

在自动化测试中&#xff0c;线上流量回放是一项关键技术&#xff0c;它可以模拟真实用户请求并重现线上场景&#xff0c;验证系统的性能和稳定性。本文将介绍Python自动化测试中的线上流量回放技术&#xff0c;并提供实战代码&#xff0c;帮助你了解日志分割解析、存储至本地My…

C# URL参数编码

代码 string s "lw123abc测试信息&#xff01;#&#xffe5;%……&*&#xff08;&#xff09;——";Console.WriteLine("原数据:\t\t" s);String s2 Uri.EscapeDataString(s);//Uri.EscapeDataString() 编码Console.WriteLine("Hexdata:\t&qu…

colmap三维重建核心逻辑梳理

colmap三维重建核心逻辑梳理 1. 算法流程束流2. 初始化3. 重建主流程 1. 算法流程束流 重建核心逻辑见 incremental_mapper.cc 中 IncrementMapperController 中 Reconstruct 初始化变量和对象判断是否有初始重建模型&#xff0c;若有&#xff0c;则获取初始重建模型数量&am…

Python Pandas 如何增加/插入一列数据(第5讲)

Python Pandas 如何增加/插入一列数据(第5讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

Python PIP安装pycorrector、kemln报错

本来想装个pycorrector用一下&#xff0c;结果在安装其依赖包kemln的时候疯狂报错&#xff0c;报错关键词包括但不限于Bash、Cmake&#xff0c;C啥的&#xff0c;搜了很多文章&#xff0c;终于摸索到了安装的办法。 1、安装bash 去官网https://gitforwindows.org/下载bash&am…

如何用idm下载迅雷 2024最新详细解析

有许多小伙伴日常习惯用迅雷处理或者下载文件&#xff0c;对于普通用户&#xff0c;由于迅雷平台的限速&#xff0c;下载速度仅有几十kb。此外&#xff0c;还有一些小伙伴安装idm后软件界面是英文&#xff0c;那么如何用idm下载迅雷&#xff0c;idm怎么设置中文呢&#xff1f;今…

国产or进口?台阶仪为何要选择国产

在微观轮廓测量领域&#xff0c;选择一款合适的台阶仪对于获得精准的测量结果至关重要。随着科技的不断发展&#xff0c;台阶仪市场上涌现了许多国产和进口产品&#xff0c;消费者在选择时可能会面临一些疑虑。 什么是台阶仪 台阶仪是一种超精密接触式微观轮廓测量仪&#xf…

tomcat错误

Error running Tomcat8: Address localhost:1099 is already in use window环境&#xff0c;打开cmd netstat -ano | findstr :1099发现对应PID为24732 结束PID taskkill /PID 24732 /F

【网络安全】-Linux操作系统—VMWare软件

文章目录 VMWare软件的安装选择VMWare版本下载VMWare安装过程 VMWare的常用操作创建新的虚拟机配置虚拟机启动和关闭虚拟机安装VMWare Tools VMWare的克隆和快照克隆&#xff08;Clone&#xff09;快照&#xff08;Snapshot&#xff09; 总结 VMWare是一种流行的虚拟化软件&…