题目描述

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。

现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?

网格中的障碍物和空位置分别用 1 和 0 来表示。

说明:m 和 n 的值均不超过 100。

示例 1:

输入:
[
[0,0,0],
[0,1,0],
[0,0,0]
]
输出: 2

解释:

3x3 网格的正中间有一个障碍物。
从左上角到右下角一共有 2 条不同的路径:

  1. 向右 -> 向右 -> 向下 -> 向下
  2. 向下 -> 向下 -> 向右 -> 向右

题解
动态规划O(nm)
状态表示:
f[i][j]表示从起点[1, 1]走到点[i, j]的所有方案的集合
状态转移:
因为只能向左和向右走,所以可以右状态f[i - 1][j]和f[i][j - 1]转移过来
每次判断当前点是否为障碍即可

c++版

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

python版

class Solution:def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:n = len(obstacleGrid)m = len(obstacleGrid[0])l = [[0 for _ in range(m)] for _ in range(n)]for i in range(n):for j in range(m):if not i and not j and not obstacleGrid[i][j]:l[i][j] = 1elif not i and not obstacleGrid[i][j]:l[i][j] = l[i][j - 1]elif not j and not obstacleGrid[i][j]:l[i][j] = l[i - 1][j]elif i and j and not obstacleGrid[i][j]:l[i][j] = l[i - 1][j] + l[i][j - 1]return l[n-1][m-1]

LeetCode:63. 不同路径 II(python、c++)相关推荐

  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(DP)

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

  4. leetcode - 63. 不同路径 II

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

  5. 92. Leetcode 63. 不同路径 II (动态规划-路径规划)

    步骤一.确定状态: 确定dp数组及含义 dp[i][j]表示从左上角到第i行j列这个位置的路径条数 步骤二.推断状态方程 dp[i][j] = dp[i-1][j] + dp[i][j-1] 步骤三. ...

  6. Leetcode 63. 不同路径 II (每日一题 20210903)

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

  7. LeetCode 63.不同路径II(动态规划)

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

  8. [leetcode]63. 不同路径 II

    跟不同路径1差不多(类似杨辉三角) class Solution {typedef long long ll; public:int uniquePathsWithObstacles(vector&l ...

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

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

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

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

最新文章

  1. 苏州之行的点滴感悟---活动中老师的言论以及火车上遇到的人
  2. kafka学习笔记:知识点整理
  3. 去姥姥家需要做的事情
  4. POJ 1195 Mobile phones(裸的二维树状数组)
  5. 为什么张扬的人别人很讨厌_为什么每个人总是讨厌重新设计,即使他们很好
  6. 前端学习(2822):页面配置文件
  7. pycharm的background task一直更新index,速度慢的解决方法
  8. Android:自定义滚动边缘(EdgeEffect)效果
  9. 原生mysql 怎么创表_Mysql的基础使用之SQL原生语句的使用:表的 创建 删除 修改 (一)...
  10. .net工作流框架,拖拽式表单设计,仿钉钉流程设计
  11. 飞机地铁的java项目怎么做_个人项目-地铁出行路线规划(Java代码实现)
  12. 如何转型社交新零售电商?转型社交新零售的核心关键是什么?
  13. 前端工程师第一篇-HTML(1)
  14. Linux下的C语言编程——位运算
  15. 海德汉仿真软件+海德汉西门子视频教程
  16. 计算机技能比赛范文,计算机基本技能大赛活动策划书范文
  17. linux 进入recovery模式,recovery模式怎么进入,教您recovery模式怎么进入
  18. 攻防世界 forgot
  19. 详细教你用NPS搭建内网穿透服务,外出时轻薄本轻松连接家里的游戏主机远程玩耍
  20. Datastage常用组件使用方法(详尽版)

热门文章

  1. 利用SpringAOP 实现 日志输出
  2. Quartus 11.0 的AS 下载方式和JTAG下载jic文件的方式
  3. 判断display为隐藏还是显示及获取css
  4. 使用Apriori算法和FP-growth算法进行关联分析
  5. CenOS7.4内核升级修复系统漏洞
  6. iOS开发中静态库制作 之.a静态库制作及使用篇
  7. [JavaWeb基础] 012.Struts2 自定义标签使用
  8. Junit4.x扩展:运行指定方法
  9. JavaBean在jsp中的使用
  10. cocoapods 安装失败 ERROR: Error installing cocoapods: ERROR: Failed to build gem native extension.