题目描述(难度:Medium):
Follow up for "Unique Paths":
Now consider if some obstacles are added to the grids. How many unique paths would there be?
An obstacle and empty space is marked as 1 and 0 respectively in the grid.
For example,
There is one obstacle in the middle of a 3x3 grid as illustrated below.
[
[0,0,0],
[0,1,0],
[0,0,0]
]
The total number of unique paths is 2.
Note: m and n will be at most 100.
Tags: Array, Dynamic Programming
Similar Problems: (M) Unique Paths
分析:求解path的种类数量(种类数动规/棋盘类动规)
设dp[i][j]表示从左上角到达grid[i][j]时的种类数,
if dp[i][j]==1, 则dp[i][j] = 0(不通达)
if dp[i][j]==0, 则dp[i][j] = dp[i-1][j]+dp[i][j-1]
代码实现:
class Solution(object):
def uniquePathsWithObstacles(self, obstacleGrid):
"""
:type obstacleGrid: List[List[int]]
:rtype: int
"""
#1.先做输入处理
m = len(obstacleGrid)
n = len(obstacleGrid[0]) if m else 0
if m==0 or n==0:
return 0
#2.初始化,同时注意dp[0][0]的值
dp = [ [0]*n for i in range(m) ]
if obstacleGrid[0][0] == 0:
dp[0][0] = 1
for i in range(1, m):
if obstacleGrid[i][0] == 0:
dp[i][0] = dp[i-1][0]
for j in range(1, n):
if obstacleGrid[0][j] == 0:
dp[0][j] = dp[0][j-1]
#3.dp
for i in range(1, m):
for j in range(1, n):
if obstacleGrid[i][j] == 0:
dp[i][j] = dp[i-1][j]+dp[i][j-1]
return dp[m-1][n-1]