LeetCode 题解工作台
不同路径
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 示例 1: 输入: m = 3, n = 7 输出: 28 示例 2: 输入…
3
题型
7
代码语言
3
相关题
当前训练重点
中等 · 状态·转移·动态规划
答案摘要
我们定义 表示从左上角走到 $(i, j)$ 的路径数量,初始时 $f[0][0] = 1$,答案为 $f[m - 1][n - 1]$。 考虑 :
Interview AiBoxInterview AiBox 实时 AI 助手,陪你讲清 状态·转移·动态规划 题型思路
题目描述
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
示例 1:
输入:m = 3, n = 7 输出:28
示例 2:
输入:m = 3, n = 2 输出:3 解释: 从左上角开始,总共有 3 条路径可以到达右下角。 1. 向右 -> 向下 -> 向下 2. 向下 -> 向下 -> 向右 3. 向下 -> 向右 -> 向下
示例 3:
输入:m = 7, n = 3 输出:28
示例 4:
输入:m = 3, n = 3 输出:6
提示:
1 <= m, n <= 100- 题目数据保证答案小于等于
2 * 109
解题思路
方法一:动态规划
我们定义 表示从左上角走到 的路径数量,初始时 ,答案为 。
考虑 :
- 如果 ,那么 可以从 走一步到达,因此 ;
- 如果 ,那么 可以从 走一步到达,因此 。
因此,我们有如下的状态转移方程:
最终的答案即为 。
时间复杂度 ,空间复杂度 。其中 和 分别是网格的行数和列数。
我们注意到 仅与 和 有关,因此我们优化掉第一维空间,仅保留第二维空间,得到时间复杂度 ,空间复杂度 的实现。
class Solution:
def uniquePaths(self, m: int, n: int) -> int:
f = [[0] * n for _ in range(m)]
f[0][0] = 1
for i in range(m):
for j in range(n):
if i:
f[i][j] += f[i - 1][j]
if j:
f[i][j] += f[i][j - 1]
return f[-1][-1]
复杂度分析
| 指标 | 值 |
|---|---|
| 时间 | Depends on the final approach |
| 空间 | Depends on the final approach |
面试官常问的追问
外企场景- question_mark
Tests whether the candidate understands combinatorics and dynamic programming.
- question_mark
Evaluates the ability to optimize space complexity in dynamic programming solutions.
- question_mark
Assesses familiarity with efficient solution strategies for grid-based problems.
常见陷阱
外企场景- error
Forgetting to initialize the first row and column of the dynamic programming table.
- error
Misunderstanding the combinatorics formula for calculating the number of paths.
- error
Using an inefficient solution with excessive space complexity when an optimized approach is possible.
进阶变体
外企场景- arrow_right_alt
Modified problem where the robot can move in more directions (e.g., up, left, right, down).
- arrow_right_alt
Unique paths problem with obstacles in the grid, requiring pathfinding around blocked cells.
- arrow_right_alt
Grid size variation with constraints on maximum m or n values for more challenging scenarios.