【Leetcode每日一题】 动态规划 - 不同路径(难度⭐⭐)(46)

1. 题目解析

题目链接:62. 不同路径

这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。

2.算法原理

想要解决这个问题,我们得像个侦探一样,一步步地追踪路径,找出所有可能的走法。接下来,让我们一步步地拆解这个问题,看看怎么找到答案。

动态规划问题还是经典五步走~

一、设定状态表

想象你站在一个棋盘上,你的任务是找出从起点到终点有多少种不同的走法。在这个问题里,我们可以设定一个状态表来记录每一步的可能性。

具体来说,我们用dp[i][j]来表示到达棋盘上的第i行第j列位置时有多少种走法。这样,我们只需要关注当前位置,而不需要考虑之前是怎么走过来的。

二、分析状态转移

现在,假设你站在[i, j]这个位置,想要知道到达这里有多少种走法。显然,你可能是从上方[i-1, j]位置走下来的,也可能是从左方[i, j-1]位置走过来的。

因此,我们可以得出一个结论:到达[i, j]位置的走法数,就是到达上方位置[i-1, j]的走法数与到达左方位置[i, j-1]的走法数之和。用数学公式表示就是:dp[i][j] = dp[i-1][j] + dp[i][j-1]

三、初始化状态表

在填表之前,我们需要给状态表一个初始值。通常,我们可以在棋盘的最前面加一列和一行作为辅助结点,来帮助我们进行初始化。

在这个问题里,我们只需要在棋盘的最上方和最左边各添加一个辅助结点,并将左上角的辅助结点dp[0][1]初始化为1(因为从起点开始只有一种走法)。这样,我们就可以开始填表了。

四、按顺序填表

填表的顺序很关键。由于我们是根据上方和左方的状态来推算当前位置的状态,所以我们需要按照从上到下、从左到右的顺序来填表。这样,当我们填写某个位置时,它上方和左方的位置都已经填好了,我们就可以直接引用它们的结果。

五、找出答案

最后,当我们填完整个状态表后,答案就藏在最后一个位置dp[m][n]里。这个位置记录了从起点到终点的所有可能走法数。

3.代码编写

class Solution 
{
public:
    int uniquePaths(int m, int n) 
    {
        vector<vector<int>> dp(m + 1, vector<int>(n + 1));//多开一行一列
        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];
    }
};

The Last

嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。

觉得有点收获的话,不妨给我点个吧!

如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~ 

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-02 22:54:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-02 22:54:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-02 22:54:03       82 阅读
  4. Python语言-面向对象

    2024-04-02 22:54:03       91 阅读

热门阅读

  1. 开源中文大语言模型汇总

    2024-04-02 22:54:03       37 阅读
  2. pip/conda导出或导入环境

    2024-04-02 22:54:03       66 阅读
  3. 迪米特法则

    2024-04-02 22:54:03       37 阅读
  4. 10个大幅提升MySQL效率的使用技巧

    2024-04-02 22:54:03       36 阅读
  5. 计算机笔记(1)

    2024-04-02 22:54:03       29 阅读
  6. 图像配准概述

    2024-04-02 22:54:03       34 阅读
  7. Permission Denial: package=android does not belong to uid=2000

    2024-04-02 22:54:03       37 阅读
  8. 探索Python中的强化学习:DQN

    2024-04-02 22:54:03       37 阅读