LeetCode63. 不同路径 II 动态规划 python3
2018-09-13 13:50
375 查看
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?
网格中的障碍物和空位置分别用
1和
0来表示。
说明:m 和 n 的值均不超过 100。
示例 1:
输入: [ [0,0,0], [0,1,0], [0,0,0] ] 输出: 2 解释: 3x3 网格的正中间有一个障碍物。 从左上角到右下角一共有 [code]2条不同的路径: 1. 向右 -> 向右 -> 向下 -> 向下 2. 向下 -> 向下 -> 向右 -> 向右[/code]
代码如下
[code]class Solution: def uniquePathsWithObstacles(self, obstacleGrid): """ :type obstacleGrid: List[List[int]] :rtype: int """ a = obstacleGrid.copy() m = len(obstacleGrid) n = len(obstacleGrid[0]) for i in range(m): for j in range(n): if obstacleGrid[i][j] == 1: continue else: if j==0 or i==0: a[i][j] = 2 if j ==0 and i!=0: if a[i-1][j] == 1: a[i][j] = 1 if i==0 and j!=0: if a[i][j-1] == 1: a[i][j] = 1 else: if a[i-1][j] == 1 or a[i][j-1] == 1: if a[i-1][j] == 1 and a[i][j-1]!=1: a[i][j] = a[i][j-1] elif a[i][j-1] == 1 and a[i-1][j]!=1: a[i][j] =a[i-1][j] else: a[i][j] = 1 else: a[i][j] = a[i-1][j]+a[i][j-1] if a[m-1][n-1] !=1: return int(a[m-1][n-1]/2) else: return 0
由于1为障碍,不太好计数,所以我将每个基数换成2,最后返回的结果除以2即是最后结果,将所有1视为障碍,如果是第一排或第一列,则该地点无法到达,有以下代码:
[code]if j==0 or i==0: a[i][j] = 2 if j ==0 and i!=0: if a[i-1][j] == 1: a[i][j] = 1 if i==0 and j!=0: if a[i][j-1] == 1: a[i][j] = 1
当遇到1时跳开,直接进行下一个地点进行最多路径数的寻找,最后输出末尾位置的最多路径数即可.
阅读更多相关文章推荐
- Leetcode 062 不同路径 Python (动态规划)
- python_lintcode_115不同的路径 II_112删除排序链表中的重复元素
- 小白的Python之路 day4 不同目录间进行模块调用(绝对路径和相对路径)
- PythonPathlib不同操作系统下使用路径的最佳选择
- 不同的路径II
- python项目中不同文件夹py源文件之间如何相互调用--Python import中相对路径的问题
- 不同的路径 II
- 不同的路径 II
- 不同环境中添加python默认的搜索路径
- 不同的路径 II
- Leetcode 063 不同路径|| Python C++ 详细题解
- LeetCode OJ 之 Unique Paths II(不同路径 - 二)
- LintCode 不同的路径II
- LeetCode 63.不同路径II
- LintCode刷题——不同的路径 II
- 不同的路径 II-LintCode
- python 引入不同路径的module
- 题目 :不同的路径 II
- python import引入不同路径下的模块
- LintCode -- 不同的路径 II