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

[豪の算法奇妙冒险] 代码随想录算法训练营第三十四天 | 62-不同路径、63-不同路径Ⅱ

代码随想录算法训练营第三十四天 | 62-不同路径、63-不同路径Ⅱ


LeetCode62 不同路径

题目链接:https://leetcode.cn/problems/unique-paths/

文章讲解:https://programmercarl.com/0062.不同路径.html

视频讲解:https://www.bilibili.com/video/BV1ve4y1x7Eu/?vd_source=b989f2b109eb3b17e8178154a7de7a51

​ 动规五部曲:

  1. 确定dp数组以及下标的含义

​ dp[i][j]表示从起点start位置到第i行第j列的位置有多少种移动方法

  1. 确定递推公式

​ 状态转移方程 dp[i][j] = dp[i-1][j] + dp[i][j-1]

  1. dp数组如何初始化

​ 起点start在左上角,终点在右下角,且只能向右或向下移动,则第零行和第零列的dp数值应都赋值为1,因为只有一种路线可以到达

  1. 确定遍历顺序

​ 根据递推公式 dp[i][j] = dp[i-1][j] + dp[i][j-1],求dp[i][j]需要依赖它的上方和左方dp值,因此是将第零列和第零行初始为1,从第一行第一列开始一行行往下遍历

  1. 举例推导dp数组

image-20260120205742478

class Solution {public int uniquePaths(int m, int n) {if(m == 1 || n == 1){return 1;}int[][] dp = new int[m][n];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];}
}

LeetCode63 不同路径Ⅱ

题目链接:https://leetcode.cn/problems/unique-paths-ii/

文章讲解:https://programmercarl.com/0063.不同路径II.html

视频讲解:https://www.bilibili.com/video/BV1Ld4y1k7c6/?vd_source=b989f2b109eb3b17e8178154a7de7a51

​ 动规五部曲:

  1. 确定dp数组以及下标的含义

​ dp[i][j]表示从起点start位置到第i行第j列的位置有多少种移动方法

  1. 确定递推公式

​ 状态转移方程 dp[i][j] = dp[i-1][j] + dp[i][j-1],遇到障碍物则不给dp赋值

  1. dp数组如何初始化

​ 起点start在左上角,终点在右下角,且只能向右或向下移动,则第零行和第零列的dp数值应都赋值为1,因为只有一种路线可以到达。特殊的是,本题还增设有障碍物,若第零行或第零列出现了障碍物,则障碍物所处位置及在它之后的位置都应初始化为0

  1. 确定遍历顺序

​ 根据递推公式 dp[i][j] = dp[i-1][j] + dp[i][j-1],求dp[i][j]需要依赖它的上方和左方dp值,因此是将第零列和第零行初始为1,从第一行第一列开始一行行往下遍历

  1. 举例推导dp数组

image-20260120212230439

class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {if(obstacleGrid[0][0] == 1){return 0;}int m = obstacleGrid.length;int n = obstacleGrid[0].length;int[][] dp = new int[m][n];for(int i = 0; i < m; i++){if(obstacleGrid[i][0] == 0){dp[i][0] = 1;}else{break;}}for(int j = 1; j < n; j++){if(obstacleGrid[0][j] == 0){dp[0][j] = 1;}else{break;}}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.jsqmd.com/news/275114/

相关文章:

  • 大数据毕设项目:基于django的电子产品电商平台主数据管理系统(源码+文档,讲解、调试运行,定制等)
  • microblaze是怎么通过把数据通过axi总线给到ip的
  • C++课后习题训练记录Day71
  • 【Android 美颜相机】第十天:YUV420SP和RGB
  • fpga 低频模块和高频模块之间单脉冲信号传输 verilog
  • CAD一键批量标注线长度——CAD c#二次开发
  • 【Android 美颜相机】第十一天:GPUImageFilter解析
  • 换根 DP 简介
  • 【毕业设计】基于机器学习的网络购物平台的智能推荐(源码+文档+远程调试,全bao定制等)
  • 强烈安利8个AI论文软件,本科生搞定毕业论文!
  • 强烈安利8个AI论文软件,本科生搞定毕业论文!
  • 第 470 场周赛Q2——3702. 按位异或非零的最长子序列
  • 文字标注旋转角度设置(防止文字倒立)
  • 储能辅助电力系统调峰的容量需求研究 Matlab代码
  • 咋的,寒假 1 个月学门黑客技术,难道很难吗?
  • 储能辅助电力系统调峰的容量需求研究 Matlab代码
  • 【Matlab】 CRC-8 计算数组Checknum
  • 拒绝“数据搬运工”:PostgreSQL 存储过程与函数实战指南
  • 2026年评价高的镀锌桥架,模压桥架,北方电缆桥架厂家行业优质推荐 - 品牌鉴赏师
  • 吐血推荐!本科生AI论文平台TOP10:开题报告文献综述全搞定
  • 开源版 Claude Code 杀疯了,怒斩 70k+ Star!!
  • 大数据毕设选题推荐:基于django的菜价可视化系统蔬菜销售分析与预测可视化系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • UVM-build_phase/run_phase的执行顺序及仿真调度
  • AL_ControlRes代码中文注释
  • Jetbrains全家桶自动破解
  • Makefile中 =、:=和 ?=的使用方法
  • 生成式软件制造--AI驱动的软件开发 - 教程
  • C++ 线程互斥锁 lock_guard
  • 大模型应用工程师崛起之路:从入门到年薪60万+的完整指南
  • 人工智能应用-机器视觉:绘画大师 04.​​​​​​​​​​​​​​基于风格迁移的绘画大师