代码随想录第39天|62.不同路径、63. 不同路径 II

78 阅读1分钟

62. 不同路径

1. first idea

dp[row][col]表示从(0,0)(row,col)位置共有多少条路径。

dp[row][col]=dp[row1][col]+dp[row][col1]dp[row][col]=dp[row-1][col] + dp[row][col-1]

dp[:][1]=dp[1][:]=1.

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        dp = [[0] * n] * m
        for row in range(m):
            dp[row][0] = 1
        for col in range(1, n):
            dp[0][col] = 1
        for row in range(1, m):
            for col in range(1, n):
                dp[row][col] = dp[row - 1][col] + dp[row][col - 1]
        return dp[-1][-1]

63. 不同路径 II

1. first idea

这个跟上一题应该没有太大区别,无非是有石头导致一些位置不能有路径。

那就把对应位置的dp[row][col]置为0.

其他位置应该不影响。

class Solution:
    def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:
        row_n = len(obstacleGrid)
        col_n = len(obstacleGrid[0])
        dp = [[0] * col_n for _ in range(row_n)]
        for row_idx in range(row_n):
            if obstacleGrid[row_idx][0] == 0:
                dp[row_idx][0] = 1
            else:
                break
        for col_idx in range(col_n):
            if obstacleGrid[0][col_idx] == 0:
                dp[0][col_idx] = 1
            else:
                break
        for row_idx in range(1, row_n):
            for col_idx in range(1, col_n):
                if obstacleGrid[row_idx][col_idx] == 1:
                    dp[row_idx][col_idx] = 0
                else:
                    dp[row_idx][col_idx] = dp[row_idx - 1][col_idx] + dp[row_idx][col_idx - 1]
        return dp[-1][-1]

实现的过程中我发现,再给上边和左边赋初值时,如果遇到障碍物,后面的都应该是0,而非1.