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

代码训练营 day38|LeetCode 62,LeetCode 63

前言

这里记录一下陈菜菜的刷题记录,主要应对25秋招、春招
个人背景
211CS本+CUHK计算机相关硕,一年车企软件开发经验
代码能力:有待提高
常用语言:C++

系列文章目录

第38天 :第九章 动态规划part02


`

文章目录

  • 前言
  • 系列文章目录
    • 第38天 :第九章 动态规划part02
  • 一、今日任务
  • 二、详细布置
      • 62.不同路径
        • 提示:
        • 样例1:
        • 思路
        • 实战
        • 踩坑
      • 63. 不同路径 II
        • 提示:
        • 样例1:
        • 思路
        • 实战
        • 踩坑
    • 总结



一、今日任务

● 62.不同路径
● 63.不同路径II

二、详细布置

62.不同路径

题目链接:力扣62
文章讲解:代码随想录

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

问总共有多少条不同的路径?

提示:

1<= m, n <= 100
题目数据保证答案小于等于 2 * 109

样例1:
输入:m = 3, n = 2
输出:3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右
3. 向下 -> 向右 -> 向下]
思路

这题相当于二维的跳楼梯,思路是一样的。

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

二维vector的初始化:vector<vector<int>> dp(m+1,vector<int>(n+1,0));

63. 不同路径 II

题目链接:力扣63题链接
文章讲解:图文讲解

给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角(即 grid[0][0])。机器人尝试移动到 右下角(即 grid[m - 1][n - 1])。机器人每次只能向下或者向右移动一步。

网格中的障碍物和空位置分别用 1 和 0 来表示。机器人的移动路径中不能包含 任何 有障碍物的方格。

返回机器人能够到达右下角的不同路径数量。

测试用例保证答案小于等于 2 * 109。

提示:

m == obstacleGrid.length
n == obstacleGrid[i].length
1 <= m, n <= 100
obstacleGrid[i][j] 为 0 或 1

样例1:
输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]
输出:2
解释:3x3 网格的正中间有一个障碍物。
从左上角到右下角一共有 2 条不同的路径:
1. 向右 -> 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右 -> 向右   
思路

这题和上一题类似,但是不同的是这题要根据障碍物先把边界全找出来,有障碍物的地方如果在第一行或第一列,障碍物后的第一行/第一列的所有点都到不了。

实战
class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        int m=obstacleGrid.size(),n=obstacleGrid[0].size();
        vector<vector<int>> dp(m,vector<int>(n,0));
        
        if(obstacleGrid[0][0]==1||obstacleGrid[m-1][n-1]==1)
            return 0;
        for(int i=0;i<m && obstacleGrid[i][0]==0;i++){
            dp[i][0]=1;
        }
        for(int i=0;i<n && obstacleGrid[0][i]==0;i++){
            dp[0][i]=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];
    }
};
踩坑

如果起点或终点有障碍物,那一定到不了,返回0

总结

今天主要学习了dp的一系列操作,今天难度不大,有点dp那味儿了
加油,坚持打卡的第38天。


http://www.kler.cn/news/359665.html

相关文章:

  • 每月洞察:App Store 和 Google Play 的主要更新
  • 【MATLAB 串口调试+虚拟串口测试】
  • 优化UVM环境(七)-整理环境,把scoreboard拿出来放在project_common环境里
  • 代码随想录算法训练营第十一天|383. 赎金信, 15. 三数之和
  • Verilator——最简单、最细节上手教程
  • 后端接收参数的几种常用注解
  • 中国移动机器人将投入养老场景;华为与APUS共筑AI医疗多场景应用
  • 2024年4个好用的录屏软件大盘点,轻松录制精彩瞬间。
  • Redis进阶
  • 浏览器实时更新esp32-c3 Supermini http server 数据
  • 智能汽车制造:海康NVR管理平台/工具EasyNVR多品牌NVR管理工具/设备实现无插件视频监控直播方案
  • Redis主从复制实现原理
  • 汽车行业焕新潮流涌动,联众优车以优质服务响应市场变化
  • vue前端开发框架的常见知识点和应用
  • 【wpf】08 xml文件的存取操作
  • Imagic: Text-Based Real Image Editing with Diffusion Models
  • 基于python3.6读取jsonl文件,并保存到Mysql数据库
  • android NDK 编译提示 is not able to compile a simple test program
  • AI创新驱动教育:科技革命下的教育转型
  • 从上市首份半年报业绩亮点看绿联科技发展