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

leetcode 63. 不同路径 II

2023.8.9

        这题是不同路径I的升级版,在路径上增加了障碍物,有障碍物的地方无法通过。

        我的思路依然还是使用动态规划,dp[i][j]的含义依然是到(i,j)这个位置的路径个数。只需要在dp数组中将有障碍物的地方赋为0。大致步骤如下:

  • 先进行极端情况判断:当起始位置为障碍物时,无法到达终点,直接返回0。
  • 然后对第一行和第一列进行初始化,有障碍物的地方赋为0,无障碍物的地方赋为其左方或者上方的值。
  • 用两个for循环递推赋值,递推公式和不同路径I 一样,当前位置的路径个数 = 上方位置路径个数 + 左方位置的路径个数。  

        代码如下:

class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {if(obstacleGrid[0][0] == 1) return 0; //起点就是障碍物int m = obstacleGrid.size();int n = obstacleGrid[0].size();vector<vector<int>> dp(m , vector<int>(n));dp[0][0] = 1;//第一行初始化赋值for(int i=1; i<n; i++){//有障碍物if(obstacleGrid[0][i] == 1) dp[0][i] = 0;//无障碍物else dp[0][i] = dp[0][i-1];}//第一列初始化赋值for(int i=1; i<m; i++){if(obstacleGrid[i][0] == 1) dp[i][0] = 0;else dp[i][0] = dp[i-1][0];}//遍历递推赋值for(int i=1; i<m; i++){for(int j=1; j<n; j++){if(obstacleGrid[i][j] == 1) dp[i][j] = 0; //有障碍物就不用赋值了else dp[i][j] = dp[i-1][j] + dp[i][j-1]; }}return dp[m-1][n-1];}
};

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

相关文章:

  • c语言每日一练(5)
  • pycharm配置conda虚拟环境
  • ubuntu 如何命令行打开系统设置(Wifi,网络,应用程序...)
  • MySQL DQL 数据查询
  • 深度学习基础知识笔记
  • 怎么系统的学习机器学习、深度学习?当然是看书了
  • 无涯教程-Perl - binmode函数
  • Spring Boot Maven package时显式的跳过test内容
  • 排序算法————基数排序(RadixSort)
  • leetcode做题笔记75颜色分类
  • 聊一下互联网开源变现
  • PHP日期差计算器,计算两个时间相差 年/月/日
  • 20230812在WIN10下使用python3将SRT格式的字幕转换为SSA格式
  • matlab使用教程(13)—稀疏矩阵创建和使用
  • UI美工设计的主要职责(合集)
  • 【前端二次开发框架关于关闭eslint】
  • Scractch3.0_Arduino_ESP32_学习随记_蓝牙键盘(三)
  • Spark2.2出现异常:ERROR SparkUI: Failed to bind SparkUI
  • LeetCode 2811. Check if it is Possible to Split Array【脑筋急转弯;前缀和+动态规划或记忆化DFS】中等
  • 【学习日记】【FreeRTOS】链表结构体及函数详解
  • 【云原生•监控】基于Prometheus实现自定义指标弹性伸缩(HPA)
  • Windows、 Linux 等操作系统的基本概念及其常见操作
  • 【RabbitMQ】golang客户端教程5——使用topic交换器
  • SpringBoot对接OpenAI
  • (C++)继承
  • 图像处理技巧形态学滤波之膨胀操作
  • 机器学习基础之《特征工程(4)—特征降维》
  • 学生管理系统(Python版本)
  • Linux下快速创建大文件的4种方法总结
  • 用 Rufus 制作 Ubuntu 系统启动盘时,选择分区类型为MBR还是GPT?