算法学习 | day34/60 不同路径/不同路径II

一、题目打卡

        1.1 不同路径

       题目链接:. - 力扣(LeetCode)

       拿到手,首先见到答案需要求的是种类的个数,并且看题目,每次移动的时候只有两个方向,这也就说明,对于某一个位置来说,其状态转移的方向来自两个方向,上和左,并且看题,这个题目要求的是总共有多少路径,所以状态应该就是走到当前这个格子一共有多少路径。

(最后看了答案发现我写的有点不对,第一个那个位置应该是1)

        

        再画个图,发现其实这个递推的过程和楼梯一模一样,只是这个变成二维的了:

class Solution {
public:int uniquePaths(int m, int n) {if(m == 0 || n == 0) return 0;// if(m == 1 && n == 1) return 0;// if((m == 1 && n == 2) || (m == 2 && n == 1)) return 1;vector<vector<int>> dp(m+1,vector<int>(n+1,0));// vector<vector<int>> dp(vector<int>(0,m+1),n+1);// for(auto& i : dp){//     for(auto & j : i){//         cout << j << " ";//     }//     cout<<endl;// }// dp[1][1] = 0;// dp[1][2] = 1;// dp[2][1] = 1;for(int i = 1 ; i < m + 1;i++){for(int j = 1 ; j < n + 1 ; j++){if(i == 1 && j == 1){dp[1][1] = 1;continue;}if(i == 1 && j == 2){dp[1][2] = 1;continue;}if(i == 2 && j == 1){dp[2][1] = 1;continue;}// if(i == 1 && j == 2) continue;// if(i == 2 && j == 1) continue;dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}return dp[m][n];}
};

        我承认比答案写的冗余的多,但是我思路是没问题的😂。

        1.2 不同路径II

        题目链接:. - 力扣(LeetCode)

        拿到题目,第一感觉和上面感觉没什么区别,把障碍物当0不就可以了嘛😂,然后试了试:

class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {if(obstacleGrid[0][0] == 1) return 0;vector<vector<int>> dp(obstacleGrid.size(),vector<int>(obstacleGrid[0].size(),0));// 考虑这种案例,[[0,0],[1,1],[0,0]],如果初始化的时候遇到 障碍物了那么后面都是0for(int i = 0; i < obstacleGrid[0].size();i++){if(obstacleGrid[0][i] == 1){dp[0][i] = 0;break; // 必须要中断,因为这个后面的这个路已经被阻断了}else dp[0][i] = 1;}for(int i = 0; i < obstacleGrid.size();i++){if(obstacleGrid[i][0] == 1) {dp[i][0] = 0;break;}else dp[i][0] = 1;}// test// for(auto& i : dp){//     for(auto & j: i){//         cout << j << " ";//     }//     cout << endl;// }//[[1,0]] 这种案例就不会进入循环,所以要在前面处理for(int i = 1 ; i < obstacleGrid.size();i++){for(int j = 1 ; j < obstacleGrid[0].size();j++){if(obstacleGrid[i][j] == 1){dp[i][j] = 0;continue;}dp[i][j] = dp[i][j - 1] + dp[i - 1][j];}}return dp[obstacleGrid.size() - 1][obstacleGrid[0].size() - 1];}
};

        差不多调试了几次就通过了,还是有很多不一样的认知的,其实这里面主要是处理障碍物的两种方式,整体思路是遇到障碍物了以后,那个这个路段被阻断,所以就走不到这个位置,但是这里处理的方法在初始化和最后循环是不一样的,初始化的时候,遇到了障碍物,那么一定记住后面所有的都需要置零,而在递推循环中,遇到障碍物以后,是将这个位置的状态,也就是走到这里的路的个数变为0。

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

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

相关文章

深入剖析主机安全中的零信任机制及其实施原理

引言 在数字化转型加速与云端服务普及的大背景下&#xff0c;传统依赖边界的网络安全模式逐渐显露出其局限性。面对愈发复杂多变的威胁环境&#xff0c;零信任安全架构作为新一代的安全范式应运而生&#xff0c;尤其是在主机层面的安全实践中&#xff0c;零信任机制正扮演着至…

基于YOLOv8车牌识别算法支持12种中文车牌类型(源码+图片+说明文档)

yolov8车牌识别算法&#xff0c;支持12种中文车牌类型 支持如下&#xff1a; 1.单行蓝牌 2.单行黄牌 3.新能源车牌 4.白色警用车牌 5.教练车牌 6.武警车牌 7.双层黄牌 8.双层白牌 9.使馆车牌 10.港澳粤Z牌 11.双层绿牌 12.民航车牌 图片测试demo: 直接运行detect_plate.py 或者…

DDL ---- 数据库的操作

1.查询所有数据库 show databases; 上图除了自创的&#xff0c;其他的四个都是mysql自带的数据库 。&#xff08;不区分大小写&#xff09; 2.查询当前数据库 select database(); 最开始没有使用数据库&#xff0c;那么查找结果为NULL 所以我们就需要先使用数据库&#xff…

shopee虾皮业绩一直没办法提升?不同时期要有不同的运营思路

店铺运营“开荒期”需要根据自身店铺数据调整运营策略&#xff0c;“运营期”就需要更多分析竞品的运营数据&#xff0c;分析接近上架时间段的出单同款/相似款&#xff0c;有效找到影响起量的因素&#xff1b;在出单缓慢&#xff0c;接近瓶颈期时找同行的策略方案&#xff0c;抓…

PyLMKit(8):ChatDB与你的数据库聊天,数据库问答

功能介绍 与你的结构化数据聊天&#xff1a;支持主流数据库、表格型excel等数据&#xff01; ChatDB&#xff1a;支持数据库问答ChatTable&#xff1a;支持txt,excel,csv等pandas dataframe表格的问答 1.下载安装 pip install pylmkit -U pip install pymysql sqlalchemy s…

【学习心得】Numpy学习指南或复习手册

本文是自己在学习Numpy过后总是遗忘的很快&#xff0c;反思后发现主要是两个原因&#xff1a; numpy的知识点很多&#xff0c;很杂乱。练习不足&#xff0c;学习过后一段时间不敲代码就会忘记。 针对这两个问题&#xff0c;我写了这篇文章。希望将numpy的知识点织成一张网&…

【智能算法】金枪鱼群优化算法(TSO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.代码展示4.参考文献 1.背景 2021年&#xff0c;Xie等人受到自然界中金枪鱼狩猎行为启发&#xff0c;提出了金枪鱼优化算法&#xff08;Tuna swarm optimization&#xff0c;TSO&#xff09;。 2.算法原理 2.1算法思想 TSO模…

选数异或(DP)

题目描述 给定一个长度为 n 的数列 A1, A2, , An 和一个非负整数 x&#xff0c;给定 m 次查询, 每次询问能否从某个区间 [l,r] 中选择两个数使得他们的异或等于 x 。 输入格式 输入的第一行包含三个整数 n, m, x 。 第二行包含 n 个整数 A1, A2, , An 。 接下来 m 行…

【Java基础】Java基础知识整合

文章目录 1. 转义字符2. 变量2.1 字符串与整型相加2.2 byte和short的区别2.3 float和double的区别2.4 char类型2.5 boolean类型2.6 自动类型转换及运算2.7 强制类型转换2.8 String的转换2.9 除法运算2.10 取模规则 3. 自增4. 逻辑运算符5. 赋值运算 6. 三元运算符&#xff1a;7…

FreeRTOS中断管理以及实验

FreeRTOS中断管理以及实验 继续记录学习FreeRTOS的博客&#xff0c;参照正点原子FreeRTOS的视频。 ARM Cortex-M 使用了 8 位宽的寄存器来配置中断的优先等级&#xff0c;这个寄存器就是中断优先级配置寄存器 &#xff0c; STM32寄存器中并且这个寄存器只使用[7:4]&#xff0c…

HCIP实验--5

实验要求&#xff1a; 实现过程&#xff1a; &#xff08;一&#xff09;配置IP地址&#xff1a; AR1: [AR1]int g0/0/0 [AR1-GigabitEthernet0/0/0]ip add 200.1.1.1 24 Apr 3 2024 19:25:38-08:00 AR1 %%01IFNET/4/LINK_STATE(l)[0]:The line protocol IP on the interf…

实体机双系统安装

实体机双系统安装 第一步&#xff1a;下载openKylin镜像 前往官网下载x86_64的镜像&#xff08;https://www.openkylin.top/downloads/628-cn.html&#xff09; tips&#xff1a;下载完镜像文件后&#xff0c;请先检查文件MD5值是否和官网上的一致&#xff0c;如果不一致请重…