欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 2.1 路径问题专题:LeetCode 62. 不同路径

2.1 路径问题专题:LeetCode 62. 不同路径

2025/4/11 21:59:29 来源:https://blog.csdn.net/shuibuxingaaa/article/details/146986597  浏览:    关键词:2.1 路径问题专题:LeetCode 62. 不同路径

动态规划解决LeetCode 62题:不同路径问题

1. 题目链接

LeetCode 62. 不同路径

2. 题目描述

一个机器人位于一个 m x n 网格的左上角(起点标记为“Start”)。机器人每次只能向右或向下移动一步。机器人试图达到网格的右下角(标记为“Finish”)。问总共有多少条不同的路径?

示例

  • 输入:m = 3, n = 7
  • 输出:28

3. 示例分析

m = 2, n = 2 为例,机器人需要从 (0,0) 移动到 (1,1),可能的路径有两条:

  1. 向右 -> 向下
  2. 向下 -> 向右

动态规划表格初始化后,每个位置的值表示到达该位置的路径数。通过逐步填充表格,最终得到右下角的值即为答案。

4. 算法思路

动态规划状态定义

  • 定义 dp[i][j] 表示从起点 (0,0) 到达 (i-1, j-1) 位置的路径数(这里 ij1 开始,避免越界)。

状态转移方程

  • 每个位置的路径数等于上方和左方位置的路径数之和:
    dp[i][j] = dp[i-1][j] + dp[i][j-1]

初始化技巧

  • 初始化 dp[0][1] = 1,使得当计算 dp[1][1] 时,能够正确推导出初始值 1。通过这种方式,无需单独处理第一行和第一列的初始化。

5. 边界条件与注意事项

  1. 网格维度为 1x1:直接返回 1
  2. 网格只有一行或一列:路径数始终为 1
  3. 索引处理:由于 dp 数组的维度为 (m+1) x (n+1),遍历时需从 i=1j=1 开始。

6. 代码实现

class Solution {
public:int uniquePaths(int m, int n) {vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));dp[0][1] = 1; // 巧妙初始化,便于计算第一格for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {dp[i][j] = dp[i-1][j] + dp[i][j-1];}}return dp[m][n];}
};

代码解析

  • 初始化dp[0][1] = 1 使得 dp[1][1] = 1,无需单独处理第一行或列。
  • 双重循环:按行优先顺序填充表格,确保每个位置的上方和左方已被计算。
  • 返回值:最终结果存储在 dp[m][n],对应右下角的位置。

通过动态规划方法,时间复杂度为 O(mn),空间复杂度为 O(mn)。此方法直观且易于理解,适合处理中等规模的网格路径问题。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词