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
.
思路: unique path 1 很trivial了,直接动态规划,2的话要考虑特殊情况,比如第一行和第一列初始化的时候,一旦遇到1,则后面的都无法到达,则后面的点都是0。再计算其他点的时候,考虑上面或者左面存在0点的时候(0表示0种方法到达该点)。
class Solution:
# @param obstacleGrid, a list of lists of integers
# @return an integer
def uniquePathsWithObstacles(self, obstacleGrid):
m = len(obstacleGrid)
n = len(obstacleGrid[0])
sum = [[0 for col in range(n)] for row in range(m)]
for i in range(m):
if obstacleGrid[i][0] == 1:
break
else:
sum[i][0] = 1
for i in range(n):
if obstacleGrid[0][i] == 1:
break
else:
sum[0][i] = 1
for i in range(1,m):
for j in range(1,n):
if obstacleGrid[i][j] == 1:
sum[i][j] = 0
elif sum[i-1][j] == 0 and sum[i][j-1] == 0:
sum[i][j] = 0
elif sum[i-1][j] == 0:
sum[i][j] = sum[i][j-1]
elif sum[i][j-1] == 0:
sum[i][j] = sum[i-1][j]
else:
sum[i][j] = sum[i][j-1] + sum[i-1][j]
return sum[m-1][n-1]