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

代码随想录算法训练营day39 | 62.不同路径、63. 不同路径 II

62.不同路径

  1. dp数组以及下标的含义:dp[i][j]代表到达第i行第j列有多少条不同的路径
  2. 递推公式:dp[i][j] = dp[i][j-1] + dp[i-1][j]
  3. dp数组初始化:dp[0][:] = 1 dp[:][0] = 1
  4. 遍历顺序:从前往后遍历
  5. 举例推导dp数组:

按照这种方法自己做出来了,有点进步

class Solution:def uniquePaths(self, m: int, n: int) -> int:dp = [[0] * n for _ in range(m)]for j in range(n):dp[0][j] = 1for i in range(m):dp[i][0] = 1for i in range(1, m):for j in range(1, n):dp[i][j] = dp[i][j - 1] + dp[i - 1][j]return dp[-1][-1]

63. 不同路径 II 

遇到障碍的时候dp赋值为0,要注意在初始化的时候,只要遇到障碍,后面的数值都置为0,因为不可能到达了

  1. dp数组以及下标的含义:dp[i][j]代表到达第i行第j列有多少条不同的路径
  2. 递推公式:dp[i][j] = dp[i][j-1] + dp[i-1][j]
  3. dp数组初始化:dp[0][:] = 1 dp[:][0] = 1
  4. 遍历顺序:从前往后遍历
  5. 举例推导dp数组:
class Solution:def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:m = len(obstacleGrid)n = len(obstacleGrid[0])dp = [[0] * n for _ in range(m)]for i in range(m):if obstacleGrid[i][0] != 0:breakelse:dp[i][0] = 1for j in range(n):if obstacleGrid[0][j] != 0:breakelse:dp[0][j] = 1for i in range(1, m):for j in range(1, n):if obstacleGrid[i][j] == 1:dp[i][j] = 0else:dp[i][j] = dp[i][j-1] + dp[i-1][j]return dp[-1][-1]

注意:

  • 可以直接在obstacleGrid上更改,节约空间
  • 如果起点或终点有障碍物,直接返回0 即if obstacleGrid[m - 1][n - 1] == 1 or obstacleGrid[0][0] == 1: return 0

相关文章:

  • 说一下JVM类加载机制?
  • InnoDB索引与优化篇(2)-理解InnoDB的执行计划
  • Windows预定义阴影画刷学习
  • Go语言教程
  • MyBatis的缓存机制: 一级缓存和二级缓存
  • css复习
  • spark为什么比mapreduce快?
  • 数据结构 第1章 绪论(一轮习题总结)
  • 代码随想录算法训练营第二十五天|216.组合总和III、17.电话号码的字母组合
  • Spring Boot 的参数校验方案
  • 【k8s资源调度-Deployment】
  • 【Linux】 faillock 命令使用
  • 【前端素材】推荐优质后台管理系统Sneat平台模板(附源码)
  • 如何食用Kaggle的Course中的exercise?
  • 2.22作业
  • 网络传输文件的问题
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • CSS相对定位
  • input实现文字超出省略号功能
  • Linux Process Manage
  • mysql常用命令汇总
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Node项目之评分系统(二)- 数据库设计
  • underscore源码剖析之整体架构
  • 半理解系列--Promise的进化史
  • 类orAPI - 收藏集 - 掘金
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 使用 @font-face
  • 移动端解决方案学习记录
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 运行时添加log4j2的appender
  • 在weex里面使用chart图表
  • 最简单的无缝轮播
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​比特币大跌的 2 个原因
  • #AngularJS#$sce.trustAsResourceUrl
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (小白学Java)Java简介和基本配置
  • (一) springboot详细介绍
  • (一)为什么要选择C++
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .net 程序发生了一个不可捕获的异常
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • @TableLogic注解说明,以及对增删改查的影响
  • @Transactional 竟也能解决分布式事务?
  • [Android]Android开发入门之HelloWorld