当前位置: 首页 > article >正文

代码随想录算法【Day34】

Day34

62.不同路径

思路

第一种:深搜 -> 超时

第二种:动态规划

第三种:数论

动态规划代码如下:

class Solution {
public:
    int uniquePaths(int m, int n) {
        vector<vector<int>> dp(m, vector<int>(n, 0));
        for (int i = 0; i < m; i++) dp[i][0] = 1;
        for (int j = 0; j < n; j++) dp[0][j] = 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 - 1][n - 1];
    }
};

五部曲

1.dp数组及下标定义:二维dp数组dp[i][j]表示从(0,0)出发,到(i,j)有dp[i][j]条不同的路径

2.递推公式:dp[i][j] = dp[i - 1][j] + dp[i][j - 1],即当前格子的值等于上面的格子和左边的格子的值的总和

3.初始化:将第一行和第一列初始为1

4.遍历顺序:从左到右一层一层往下遍历

5.数组的数据应该是怎样的:

62.不同路径1

63. 不同路径 II

思路

有障碍的话,其实就是标记对应的dp table(dp数组)保持初始值(0)就可以了。

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        int m = obstacleGrid.size();
        int n = obstacleGrid[0].size();
        if (obstacleGrid[m - 1][n - 1] == 1 || obstacleGrid[0][0] == 1) //如果在起点或终点出现了障碍,直接返回0
            return 0;
        vector<vector<int>> dp(m, vector<int>(n, 0));
        for (int i = 0; i < m && obstacleGrid[i][0] == 0; i++) dp[i][0] = 1;
        for (int j = 0; j < n && obstacleGrid[0][j] == 0; j++) dp[0][j] = 1;
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                if (obstacleGrid[i][j] == 1) continue;
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
            }
        }
        return dp[m - 1][n - 1];
    }
};

五部曲

和上一题是一样的


http://www.kler.cn/a/523946.html

相关文章:

  • java——继承
  • 用HTML、CSS和JavaScript实现庆祝2025蛇年大吉(附源码)
  • 二进制安卓清单 binary AndroidManifest - XCTF apk 逆向-2
  • 架构技能(六):软件设计(下)
  • 【C语言练习题】找出不是两个数组共有的元素
  • 如何在Spring Boot项目中高效集成Spring Security
  • [ABC137E] Coins Respawn 题解
  • YOLOv11-ultralytics-8.3.67部分代码阅读笔记-block.py
  • LTV预估 | 大R挖掘器ExpLTV
  • LeetCode-3433. 统计用户被提及情况
  • OpenBMC:简介
  • Controller 层优化四步曲
  • 探索现代前端微前端架构的最佳实践
  • MySQL知识点总结(十)
  • 2748. 美丽下标对的数目(Beautiful Pairs)
  • 【Python】 使用pygame库实现新年烟花
  • 支持selenium的chrome driver更新到132.0.6834.110
  • 彻底理解Flink的多种部署方式
  • 人工智能丨基于机器学习的视觉 CV 处理技术
  • 开发第一个安卓页面
  • 长尾关键词优化对提升SEO和网站访客流量的实用影响与策略
  • C语言深入解析 printf的底层源码实现
  • 【前端】Hexo 部署指南_hexo-deploy-git·GitHub Actions·Git Hooks
  • 接口 V2 完善:分布式环境下的 WebSocket 实现与 Token 校验
  • docker desktop使用ollama在GPU上运行deepseek r1大模型
  • ACL-2024 | 具身智能空间理解能力几何?EmbSpatial-Bench:视觉语言大模型在具身任务中空间理解水平测试基准