问题描述
机器人走方格,只能朝右或者下走,一次只能走一个格子。有些格子有障碍无法通过,他们的值用1表示,有些是空,用0表示可以通过。试求共有多少条不同路径可以走出去(到finish那个方格)。
解决方案
Python版动态规划:
class Solution(object):
def uniquePathsWithObstacles(self, obstacleGrid):
"""
:type obstacleGrid: List[List[int]]
:rtype: int
"""
m = len(obstacleGrid)
if m == 0:
return 0
n = len(obstacleGrid[0])
dp = [[0]*n for i in range(m)]
dp[0][0] = 0 if obstacleGrid[0][0] == 1 else 1
for i in range(1,n):
dp[0][i] = dp[0][i-1]*(1 - obstacleGrid[0][i])
for i in range(1,m):
dp[i][0] = dp[i-1][0]*(1 - obstacleGrid[i][0])
for i in range(1,m):
for j in range(1,n):
dp[i][j] = (dp[i-1][j] + dp[i][j-1])*(1 - obstacleGrid[i][j])
return dp[-1][-1]