LeetCode:63. 不同路径 II(python、c++)
题目描述
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?
网格中的障碍物和空位置分别用 1 和 0 来表示。
说明:m 和 n 的值均不超过 100。
示例 1:
输入:
[
[0,0,0],
[0,1,0],
[0,0,0]
]
输出: 2
解释:
3x3 网格的正中间有一个障碍物。
从左上角到右下角一共有 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++)相关推荐
- Java实现 LeetCode 63 不同路径 II(二)
63. 不同路径 II 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在 ...
- LeetCode:63. 不同路径 II
题目链接 63. 不同路径 II 题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图 ...
- LeetCode 63. 不同路径 II(DP)
1. 题目 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为 ...
- leetcode - 63. 不同路径 II
一个机器人位于一个 m∗nm * nm∗n 网格的左上角 (起始点在下图中标记为"Start""Start""Start" ). 机器人每次 ...
- 92. Leetcode 63. 不同路径 II (动态规划-路径规划)
步骤一.确定状态: 确定dp数组及含义 dp[i][j]表示从左上角到第i行j列这个位置的路径条数 步骤二.推断状态方程 dp[i][j] = dp[i-1][j] + dp[i][j-1] 步骤三. ...
- Leetcode 63. 不同路径 II (每日一题 20210903)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ).机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为"F ...
- LeetCode 63.不同路径II(动态规划)
题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为& ...
- [leetcode]63. 不同路径 II
跟不同路径1差不多(类似杨辉三角) class Solution {typedef long long ll; public:int uniquePathsWithObstacles(vector&l ...
- leetcode题库--63不同路径 II
不同路径 这题就是一个组合问题. int fun(int num){int ans = 1;while(num){ans*=num;num--;}return ans;}int uniquePaths ...
- LeetCode-动态规划基础题-63. 不同路径II
描述 63. 不同路径II 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角 ...
最新文章
- 苏州之行的点滴感悟---活动中老师的言论以及火车上遇到的人
- kafka学习笔记:知识点整理
- 去姥姥家需要做的事情
- POJ 1195 Mobile phones(裸的二维树状数组)
- 为什么张扬的人别人很讨厌_为什么每个人总是讨厌重新设计,即使他们很好
- 前端学习(2822):页面配置文件
- pycharm的background task一直更新index,速度慢的解决方法
- Android:自定义滚动边缘(EdgeEffect)效果
- 原生mysql 怎么创表_Mysql的基础使用之SQL原生语句的使用:表的 创建 删除 修改 (一)...
- .net工作流框架,拖拽式表单设计,仿钉钉流程设计
- 飞机地铁的java项目怎么做_个人项目-地铁出行路线规划(Java代码实现)
- 如何转型社交新零售电商?转型社交新零售的核心关键是什么?
- 前端工程师第一篇-HTML(1)
- Linux下的C语言编程——位运算
- 海德汉仿真软件+海德汉西门子视频教程
- 计算机技能比赛范文,计算机基本技能大赛活动策划书范文
- linux 进入recovery模式,recovery模式怎么进入,教您recovery模式怎么进入
- 攻防世界 forgot
- 详细教你用NPS搭建内网穿透服务,外出时轻薄本轻松连接家里的游戏主机远程玩耍
- Datastage常用组件使用方法(详尽版)
热门文章
- 利用SpringAOP 实现 日志输出
- Quartus 11.0 的AS 下载方式和JTAG下载jic文件的方式
- 判断display为隐藏还是显示及获取css
- 使用Apriori算法和FP-growth算法进行关联分析
- CenOS7.4内核升级修复系统漏洞
- iOS开发中静态库制作 之.a静态库制作及使用篇
- [JavaWeb基础] 012.Struts2 自定义标签使用
- Junit4.x扩展:运行指定方法
- JavaBean在jsp中的使用
- cocoapods 安装失败 ERROR: Error installing cocoapods: ERROR: Failed to build gem native extension.