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

63. 不同路径 II

题目链接:

63. 不同路径 II

题目描述:

给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角(即 grid[0][0])。机器人尝试移动到 右下角(即 grid[m - 1][n - 1])。机器人每次只能向下或者向右移动一步。

网格中的障碍物和空位置分别用 1 和 0 来表示。机器人的移动路径中不能包含 任何 有障碍物的方格。

返回机器人能够到达右下角的不同路径数量。

测试用例保证答案小于等于 2 * 109

题目分析:

该题我选择用二维的dp数组来进行动态规划,最后位置的dp值即不同的路径数

官方题解使用的是二维变一维的滚动数组思想,二维就是比一维多判断几个条件,但更好理解一些

题解:

int uniquePathsWithObstacles(int** obstacleGrid, int obstacleGridSize, int* obstacleGridColSize) {int row = obstacleGridSize;int col = *obstacleGridColSize;int dp[row][col];    memset(dp, 0, sizeof(dp));              // 将dp数组中的值全赋值为0    for(int i = 0; i < row; i++){           // 两重for循环遍历路径数组for(int j = 0; j < col; j++){            if(obstacleGrid[i][j]){         // 当前位置为障碍物时,dp数组中的值为0dp[i][j] = 0;continue;}if(i == 0 && j == 0){           // 当前位置为初始位置且不为障碍物dp[i][j] = 1;}else if(i-1 >= 0 && j-1 >= 0){ // 不是最上面的边或者最左边的边时dp[i][j] = dp[i-1][j] + dp[i][j-1];}else if(i-1 >= 0){             // 是最左边的边dp[i][j] = dp[i-1][j];}else{                          // 是最上面的边dp[i][j] = dp[i][j-1];}}}return dp[row-1][col-1];
}

http://www.xdnf.cn/news/8642.html

相关文章:

  • 2.2.1 05年T1复习
  • 1.2 TypeScript 与 JavaScript 的区别
  • Java:堆排序
  • Git教程
  • 龙虎榜——20250523
  • 地形生成原理与实现
  • 【Java】Java元注解
  • 【操作系统】-4.1.8文件共享
  • Unitree 5. GO1 3D打印配件
  • 高通usecase理解
  • 【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何形成高斯椭球
  • 【递归、搜索与回溯算法】专题三:穷举vs暴搜vs深搜vs回溯vs剪枝
  • 第十节第八部分:Lambda表达式、Lambda表达式的省略规则
  • YOLOV11网络图和数据增强
  • PotPlayer 4K 本地万能影音播放器
  • 基于厚度变化的分割点定位算法:以瓶口颈部为例
  • 【分组背包 数论】P12160 [蓝桥杯 2025 省 Java B] 2 的幂|普及+
  • MySQL 第五讲---基础篇 表的约束
  • 每个元素后面加“、”,但最后一个元素不加
  • 点云处理的瑞士军刀PCL几何库
  • 基于Java(GUI)实现五子棋
  • 【AI】小参数,大影响:从OpenAI参数看AI开发挑战
  • Python打卡训练营学习记录Day34
  • 文章记单词 | 第104篇(六级)
  • MySQL --- 事务
  • 【Linux系列】EVS 与 VBD 的对比
  • 文章记单词 | 第103篇(六级)
  • 永磁同步电机参数辨识算法--拓展卡尔曼滤波参数辨识
  • 探索微观世界的“度量衡”:显微测量仪器解析
  • 《C++20新特性全解析:模块、协程与概念(Concepts)》