应用题-动态规划-不同路径II

管理员
```python class Solution: # 给定一个 m x n 的整数数组 grid。 # 一个机器人初始位于 左上角(即 grid[0][0])。 # 机器人尝试移动到 右下角(即 grid[m - 1][n - 1])。 # 机器人每次只能向下或者向右移动一步。 # 网格中的障碍物和空位置分别用 1 和 0 来表示。机器人的移动路径中不能包含 任何 有障碍物的方格。 # 返回机器人能够到达右下角的不同路径数量。 def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int: m = len( obstacleGrid ) n = len( obstacleGrid[ 0 ] ) # 确定dp含义 ( 即记录什么 ) dp = [ [ 0 for _ in range( n ) ] for _ in range( m ) ] # 递推公式: 不是障碍格的grid( i-1,j )和grid( i, j-1 ) ) 走一格就是 grid( i, j ) # 初始化dp for i in range( n ): if obstacleGrid[ 0 ][ i ] == 1: # 障碍物堵住 后续位置均不可达 break dp[ 0 ][ i ] = 1 for i in range( m ): if obstacleGrid[ i ][ 0 ] == 1: break dp[ i ][ 0 ] = 1 # 实现递推 for i in range( 1, m ): for j in range( 1, n ): # 位置本身就是障碍格 if obstacleGrid[ i ][ j ] == 1: dp[ i ][ j ] = 0 else: # 否则才可到达 if obstacleGrid[ i - 1 ][ j ] == 0: dp[ i ][ j ] += dp[ i - 1 ][ j ] if obstacleGrid[ i ][ j - 1 ] == 0: dp[ i ][ j ] += dp[ i ][ j - 1 ] return dp[ - 1 ][ -1 ] ```
评论 0

发表评论 取消回复

Shift+Enter 换行  ·  Enter 发送
还没有评论,来发表第一条吧