63. 不同路径II
分析
-
状态定义:
f[i][j]
代表从起点(0, 0)
到达(i, j)
的路径数 -
状态转移:
- 如果
obstacleGrid[i][j] == 0
,表示当前位置可以走(没有障碍物),我们根据递推公式更新路径数:- 如果当前位置是起点
(0, 0)
,则f[0][0] = 1
- 否则,当前位置的路径数由上方和左方的路径数之和
f[i][j] = f[i-1][j] + f[i][j-1]
得出
- 如果当前位置是起点
- 如果
obstacleGrid[i][j] == 1
,说明当前位置有障碍物,不能走到这里,无需处理f[i][j]
,因为初始的f[i][j]
值为0
- 如果
-
返回最终结果:循环结束后,
f[n-1][m-1]
就是从起点到终点的不同路径数
时间复杂度
时间复杂度 O(n * m)
空间复杂度
空间复杂度为 O(n * m)
C++代码
|
|