📌  相关文章
📜  网格中从一个点到另一个点的方式数量(1)

📅  最后修改于: 2023-12-03 15:11:43.497000             🧑  作者: Mango

网格中从一个点到另一个点的方式数量

在一个矩形网格中,给定起点和终点,求从起点到终点的路径数目。路径必须满足往右或往下行走。

思路

使用动态规划算法来解决。

定义一个二维数组$dp[i][j]$表示从起点$(0,0)$到$(i,j)$的路径数目。

  • 当$i=0$或$j=0$时,$dp[i][j]=1$,因为只有一种方式可以到达这些点。
  • 对于其他点$(i,j)$,可以从$(i-1,x)$或$(i,j-1)$两个点转移过来,即$dp[i][j]=dp[i-1][j]+dp[i][j-1]$。

最终的答案即为$dp[m-1][n-1]$,其中$m$和$n$分别表示网格的行数和列数。

代码实现
def unique_paths(m: int, n: int) -> int:
    # 初始化dp数组
    dp = [[1] * n] + [[1] + [0] * (n - 1) for _ in range(m - 1)]

    # 动态规划
    for i in range(1, m):
        for j in range(1, n):
            dp[i][j] = dp[i-1][j] + dp[i][j-1]

    return dp[m-1][n-1]
示例
assert unique_paths(3, 7) == 28
assert unique_paths(3, 2) == 3