62. 不同路径
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
问总共有多少条不同的路径?
例如,上图是一个7 x 3 的网格。有多少可能的路径?
示例 1:
1 | 输入: m = 3, n = 2 |
示例 2:
1 | 输入: m = 7, n = 3 |
提示:
1 <= m, n <= 100
题目数据保证答案小于等于
2 * 10 ^ 9
我们使用 dp[i][j]
来存储到达 (i,j)
的最多路径,由于机器人只能向下或向右,则 dp[i][j] = dp[i-1][j] + dp[i][j-1]
。对于第一行 dp[0][]
和第一列 dp[][0]
只能有一条路径到达,所以它们的值全部为 1 。
1 | class Solution { |
时间复杂度为O(mn),空间复杂度为 O(mn)。
优化空间复杂度 为 O(n)
由于只需要dp[i-1][j]
和 dp[i][j-1]
,我们只用使用一个一维数组存储上一行的数据。
1 | class Solution { |
时间复杂度为O(mn),空间复杂度为 O(n)。
v1.5.2