题目描述

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。
现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?
网格中的障碍物和空位置分别用 1 和 0 来表示。

问题分析

动态规划:

  • 确定dp数组以及下标的含义:dp[i][j]:表示从(0,0)出发,到达(i,j)有dp[i][j]条不同路径
  • 确定递推公式:递推公式和力扣:62.不同路径一样,dp[i][j]=dp[i-1][j]+dp[i][j-1],不过要注意,如果(i,j)就是障碍物,则应该保持初始状态(初始状态为0)
  • 初始化dp数组:从(0,0)到(i,0)的路径只有一条,所以dp[i][0]一定都是1,dp[0][j]同理。如果(i,0)这一条路径上有了障碍物,那么障碍物之后(包括障碍物)位置都是不能到达的,所以障碍物之后的dp[i][0]应该还是初始值0,同理(0,j)路径上也一样。

代码实现

// 编程软件:VS2019
// 参考书籍:代码随想录
#include<iostream>
#include<vector>
using namespace std;//动态规划
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m = obstacleGrid.size();int n = obstacleGrid[0].size();vector<vector<int>> dp(m, vector<int>(n, 0));for (int i = 0; i < m && obstacleGrid[i][0] == 0; i++) dp[i][0] = 1; // (i,0)路径for (int j = 0; j < n && obstacleGrid[0][j] == 0; j++) dp[0][j] = 1; // (0,j)路径for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {if (obstacleGrid[i][j] == 1) continue; // 障碍物dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}return dp[m - 1][n - 1];
}int main() {vector<vector<int>> obstacleGrid = { {0, 0, 0},{0, 1, 0},{0, 0, 0} };cout<< uniquePathsWithObstacles(obstacleGrid);
}
// 结果:2

力扣:63. 不同路径 II相关推荐

  1. Java实现 LeetCode 63 不同路径 II(二)

    63. 不同路径 II 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在 ...

  2. LeetCode-动态规划基础题-63. 不同路径II

    描述 63. 不同路径II 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角 ...

  3. LeetCode:63. 不同路径 II

    题目链接 63. 不同路径 II 题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图 ...

  4. 摩尔投票法(力扣- -229. 求众数 II)

    摩尔投票法(力扣- -229. 求众数 II) 文章目录 摩尔投票法(力扣- -229. 求众数 II) 一.题目描述 二.分析 摩尔投票法 总结 三.代码 一.题目描述 二.分析 这道题如果用O(N ...

  5. leetcode题库--63不同路径 II

    不同路径 这题就是一个组合问题. int fun(int num){int ans = 1;while(num){ans*=num;num--;}return ans;}int uniquePaths ...

  6. 63. 不同路径 II【动态规划】

    63.不同路径 II 题目链接:https://leetcode-cn.com/problems/unique-paths-ii/ 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 ...

  7. 跟我打卡LeetCode 61旋转链表62不同路径63不同路径 II

    原创公众号:bigsai 关注后回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 49字母异位词分组&50pow(x,n)&51八皇后 LeetCode打卡 52八皇 ...

  8. LeetCode 63. 不同路径 II(DP)

    1. 题目 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为 ...

  9. leetcode - 63. 不同路径 II

    一个机器人位于一个 m∗nm * nm∗n 网格的左上角 (起始点在下图中标记为"Start""Start""Start" ). 机器人每次 ...

最新文章

  1. 洛谷P3723 [AH2017/HNOI2017]礼物(FFT)
  2. Python基础(1)
  3. DOS下从硬盘安装XP系统方法与要点
  4. php 获取请求,PHP 扩展 - 获取请求信息
  5. scheme 学习:红黑树
  6. 信息学奥赛一本通 2033:【例4.19】阶乘之和
  7. 3、构建并安装PHP扩展
  8. 实践单元测试-Using NUnit 大纲
  9. Entity Framework 5自动生成ObjectContext或者DbContext的设置
  10. matlab瓶盖盖严检查,口服液瓶盖密封性的质量检测方法你知道吗?
  11. stm32f7 java_STM32F7开发-安装MDK超详细操作步骤
  12. 对冲策略及Python实现
  13. 节理玫瑰花图怎么画_利用Excel软件绘制节理走向玫瑰花图
  14. 关于专利申请中发明内容和具体实施方法有什么本质区别?
  15. Ricochet —— 基于 Tor 的加密即时通信工具
  16. Mac 上删除键(delete)的妙用
  17. CSS中颜色、样式规则(字体样式、列表样式、表格样式)
  18. Ubuntu中编写C语言程序
  19. 计算机网络利弊的作文英语作文,网络的利弊英语作文模板及范文赏析
  20. ps42k20服务器出现问题_香港代理服务器和香港服务器有什么不同,如何选择?-行业新闻...

热门文章

  1. 【POJ3208】 (DP)
  2. 风速报警仪的两种安装方式
  3. 戏言产品三板斧,拿着三宝来作秀
  4. 视频教程-2020软考--网络规划设计师【论文】视频精讲-软考
  5. 思科服务器查看生成树协议,生成树协议、CDP思科设备发现协议、SSH协议
  6. JSON基础入门实战讲解在线视频课程-JSON语法规则,json对象,json数组的定义和使用
  7. 国产 工程机械控制器SPC-SFMC-X2424A
  8. epson打印机设置方法
  9. 小米Max正式发布 三种颜色三种配置
  10. Android修行之路——Android程序设计基础(三)