|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目描述:
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
代码在下面:
- class Solution(object):
- def uniquePaths(self, m, n):
- """
- :type m: int
- :type n: int
- :rtype: int
- """
- # 采用二位数组形式的动态规划
- # f[i][j]表示当前移动到的总次数,要求f[-1][-1]
- # 状态转移公式:f[i][j] = f[i-1][j]+f[i][j-1]
- # 初始值:每一步移动的次数可以看做横轴和纵轴的和,因此 f[i][0] = 1,f[0][j]=1
- # 运动的轨迹:要么往下,要么往左
- # 时间复杂度:O(m*n),空间复杂度:O(m*n)
-
- f = [[0]*n for zong in range(m)]
- for i in range(m):
- f[i][0] = 1
- for j in range(n):
- f[0][j] = 1
- for i in range(1,m):
- for j in range(1,n):
- f[i][j] = f[i-1][j]+f[i][j-1]
- return f[-1][-1]
-
- """优化空间复杂度为O(n)"""
- # 对二维矩阵进行压缩成一位数组,将最新生成的值覆盖掉旧的值,逐行求解当前位置的最新路径条数!
- # 实质:在于动态计算并替换当前位置下的路径数最新值
- # 状态转移公式变成:f[i] = f[i-1]+f[i]
- # 初始值: f = [1]*m,取横轴
- # f[-1]表示可能路径的总数
- # 空间复杂度:O(n),时间复杂度:O(m*n)
- f = [1]*m
- for j in range(1,n):
- for i in range(1,m):
- f[i] = f[i-1]+f[i]
- return f[-1]
复制代码
不明白的是为什么dp[-1][-1]能表示到最右下角的格子的最多路径?上段代码中如何体现最多路径数 |
|