以下是一个示例代码,用于解决LeetCode上的“不同路径 II”问题:
def uniquePathsWithObstacles(obstacleGrid):
# 获取网格的行数和列数
m = len(obstacleGrid)
n = len(obstacleGrid[0])
# 创建一个二维数组,用于存储到达每个位置的不同路径数
dp = [[0] * n for _ in range(m)]
# 初始化起点位置的路径数为1
dp[0][0] = 1 if obstacleGrid[0][0] == 0 else 0
# 处理第一列的路径数
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]
# 计算其他位置的路径数
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]
在这个解决方法中,我们使用动态规划来计算不同路径的数量。首先,我们创建一个二维数组dp
,用于存储到达每个位置的不同路径数。然后,我们初始化起点位置的路径数为1。接下来,我们处理第一列和第一行的路径数,如果网格中的障碍物位置为0,则路径数与上一个位置的路径数相同,否则路径数为0。最后,我们计算其他位置的路径数,对于每个位置,如果网格中的障碍物位置为0,则路径数等于上方和左方位置的路径数之和。最终,返回终点位置的路径数。
这个解决方法的时间复杂度是O(mn),其中m和n分别是网格的行数和列数。空间复杂度也是O(mn),因为我们需要创建一个二维数组来存储路径数。
上一篇:不同流上的日志事件排序
下一篇:不同路径的背包价值相加