首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >动态规划 —— 路径问题-不同路径

动态规划 —— 路径问题-不同路径

作者头像
迷迭所归处
发布2024-11-19 17:15:53
发布2024-11-19 17:15:53
4430
举报
文章被收录于专栏:动态规划动态规划

1. 不同路径

题目链接: 62. 不同路径 - 力扣(LeetCode)

https://leetcode.cn/problems/unique-paths/description/


2. 算法原理

1. 状态表示:以莫一个位置为结尾 dp[i]表示:以[i,j]位置为结尾时,解码方法的总数 dp[i,j]表示:走到[i,j]位置的时候一共有多少种方法

2. 状态转移方程 根据最近的一步来划分问题: 到达dp[i][j]有两种情况: 1. 从上面过来:dp[i-1,j] -> dp[i,j],dp[i-1,j] 2. 从左边过来:dp[i,j-1] -> dp[i,j],dp[i,j-1] 之所以这里是dp[i-1,j]而不是dp[i-1,j]+1是因为这里的+1是dp[i-1,j]到dp[i,j]的一步,而不是一种方法

本题的状态转移方程是:dp[i][j] = dp[i-1,j] + dp[i,j-1]

3. 初始化把dp表填满不越界,让后面的填表可以顺利进行 根据状态转移方程来初始化的话是需要dp[i-1,j] 和 dp[i,j-1]来确定要初始化位置值,但是我们整个矩阵的上面的一行和左边的一列是不符合这个情况的,所以我们可以在上面的一行和左边的一列再额外的加上一行和一列的虚拟节点

那个虚拟位置为1是因为上面的值加上左边的值就可以得到原来第一个位置的值,再按照上面的值加上左边的值来计算其他位置的值

4. 填表顺序 本题的填表顺序是:从上往下填写每一行,每一行的值是从左往右

5. 返回值 :题目要求 + 状态表示 本题的返回值是:dp[m][n]


3.代码

动态规划的固定四步骤:1. 创建一个dp表 2. 在填表之前初始化 3. 填表(填表方法:状态转移方程) 4. 确定返回值

代码语言:javascript
复制
class Solution {
public:
    int uniquePaths(int m, int n) {
        //创建dp表二维数组
        vector<vector<int>>dp(m+1,vector<int>(n+1));
        //只用初始化[0][1]为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];
    }
};

完结撒花~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 不同路径
  • 2. 算法原理
  • 3.代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档