当前位置: 首页 > news >正文

leetcode日记(51)不同路径Ⅱ

和上一道题(无障碍物的最短路径)很像,但事实上比上一题多了优化方法

根据上一题改的代码如下,添加了对障碍物的判定,如果有障碍物则将数组值设为0。

class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m=obstacleGrid.size();int n=obstacleGrid[0].size();int a[m][n];for(int i=0;i<m;i++) for(int j=0;j<n;j++) a[i][j]=0;for(int i=0;i<n&&obstacleGrid[0][i]==0;i++) a[0][i]=1;for(int i=0;i<m&&obstacleGrid[i][0]==0;i++) a[i][0]=1;for(int i=1;i<m;i++){for(int j=1;j<n;j++){if(obstacleGrid[i][j]==0) a[i][j]=a[i-1][j]+a[i][j-1];}}return a[m-1][n-1];}
};

然后看了答案,答案说可以使用滚动数组优化,就又去搜了一下滚动数组的使用方法。

参考了一下63. 不同路径 II(C++)---动态规划解题(并进行滚动数组思想优化),琢磨了一下代码,原理是将上面的二维数组优化成了一维,记录开始位置到达每一行末尾的路径数。如有障碍物则直接将数目设为0,然后继续遍历这一行;没有障碍物就将数目设为上一行路径数加上这一行路径数。

需要注意的是遍历方向,按照上面这种思路需要先遍历列再遍历行,如果先遍历行,如果上一行末尾有障碍物那么下一行就通过不了。

class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m=obstacleGrid.size();int n=obstacleGrid[0].size();vector<int> a(m);a[0]=!obstacleGrid[0][0];for(int j=0;j<n;j++){for(int i=0;i<m;i++){if(obstacleGrid[i][j]) a[i]=0;else if(i>0&&!obstacleGrid[i-1][j]) a[i]+=a[i-1];cout<<i<<" "<<j<<" "<<a[i]<<endl;}}return a[m-1];}
};

感觉这个方法很熟悉,前几天的一道题也用过这种思路(虽然也是看答案知道的就是了)

http://www.lryc.cn/news/408523.html

相关文章:

  • 图解分布式事务中的2PC与Seata方案
  • 数据结构(Java):Map集合Set集合哈希表
  • 网络战时代的国家安全:策略、技术和国际合作
  • 【elasticsearch实现优先展示连词并按某个字段折叠显示最新一条】
  • Golang | Leetcode Golang题解之第284题窥视迭代器
  • C语言中的结构体
  • 3.qml与c++模块化开发
  • 怎么使用github上传XXX内所有文件
  • 合作伙伴中心Partner Center中添加了Copilot预览版
  • Navidrome音乐服务器 + 音流APP = 释放你的手机空间
  • Prometheus安装部署
  • 算法(查找算法---二分查找/索引查找/哈希表查找)
  • SQL labs-SQL注入(二)
  • go 语言踏出第一步
  • SpringBoot-21 SpringBoot微服务的发布与部署(3种方式)
  • 在occluded Person Re-ID中,选择clip还是ViT作为backbone?
  • Linuxnat网络配置
  • 77.WEB渗透测试-信息收集-框架组件识别利用(1)
  • ExcelJS:轻松实现Excel文件的读取、操作与写入
  • Java 多线程技术详解
  • 一份简单实用的MATLAB M语言编码风格指南
  • ubuntu 环境下soc 使用qemu
  • Centos安装、迁移gitlab
  • 【Python机器学习】朴素贝叶斯——使用Python进行文本分类
  • 【linux】Shell脚本三剑客之grep和egrep命令的详细用法攻略
  • Spring条件装配:灵活配置你的应用
  • 【前端 08】简单学习js字符串
  • 【LLM】-07-提示工程-聊天机器人
  • AvaloniaUI的学习
  • 刷题——快速排序