LeetCode:62. Unique Paths - Python

问题描述:

62. 不同路径

一个机器人位于一个 m x n 网格的左上角 。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。

问总共有多少条不同的路径?

说明:mn 的值均不超过100

示例 1:

输入: m = 3, n = 2
输出: 3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向右 -> 向下
2. 向右 -> 向下 -> 向右
3. 向下 -> 向右 -> 向右

问题分析:

动态规划方法,dp方程式如下:

dp[n][m] = dp[n-1][m] + dp[n][m-1]  # n为行数,m为列数

Python3实现:

# @Time   :2018/08/05
# @Author :LiuYinxing
# 动态规划


class Solution:
    def uniquePaths(self, m, n):
        dp = [[0]*m for _ in range(n)]  # 初始化dp
        dp[0][0] = 1
        for i in range(n):
            for j in range(m):
                if i + 1 < n:  # 更新下面的方格
                    dp[i + 1][j] += dp[i][j]
                if j + 1 < m:  # 更新右边的方格
                    dp[i][j + 1] += dp[i][j]
        return dp[n-1][m-1]

    def uniquePaths1(self, m, n):  # 压缩dp空间,可以先求一列,然后在求一列,依次进行
        dp = [0] * n
        dp[0] = 1
        for j in range(m):
            for i in range(1, n):  # dp[i](表示当前列值) = dp[i] (表示前一列的值)+ dp[i-1](当前列的上面的值)
                dp[i] = dp[i] + dp[i - 1]
        return dp[n - 1]

欢迎指正哦。

猜你喜欢

转载自blog.csdn.net/XX_123_1_RJ/article/details/81428993