问题描述:
一个机器人位于一个
m x n
网格的左上角 。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。
问总共有多少条不同的路径?
说明:m
和 n
的值均不超过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]
欢迎指正哦。