秋招算法备战第39天 | 62.不同路径、63. 不同路径 II
62. 不同路径 - 力扣(LeetCode)
按照动态规划五部曲走,非常清晰
class Solution:def uniquePaths(self, m: int, n: int) -> int:dp = [[0 for _ in range(n)] for _ in range(m)]for i in range(m):dp[i][0] = 1for j in range(n):dp[0][j] = 1for i in range(1, m):for j in range(1, n):dp[i][j] = dp[i-1][j] + dp[i][j-1]return dp[-1][-1]
上面的代码对于数据定义和初始化还能优化,具体如下
def uniquePaths(m, n):# 初始化二维数组dpdp = [[1] * n for _ in range(m)]# 遍历每个点计算到达该点的路径数量for i in range(1, m):for j in range(1, n):dp[i][j] = dp[i-1][j] + dp[i][j-1]return dp[m-1][n-1]
63. 不同路径 II - 力扣(LeetCode)
和上一题不一样的地方在于初始化以及根据条件不同有不同的状态转移公式
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] == 1:breakdp[i][0] = 1for j in range(n):if obstacleGrid[0][j] == 1:breakdp[0][j] = 1for i in range(1, m):for j in range(1, n):if obstacleGrid[i][j] == 1:continueif obstacleGrid[i-1][j] == 0 and obstacleGrid[i][j-1] == 0:dp[i][j] = dp[i-1][j] + dp[i][j-1]elif obstacleGrid[i-1][j] == 1 and obstacleGrid[i][j-1] == 0:dp[i][j] = dp[i][j-1]elif obstacleGrid[i-1][j] == 0 and obstacleGrid[i][j-1] == 1:dp[i][j] = dp[i-1][j]return dp[-1][-1]
后面发现状态转移方程可以简化,在obstacleGrid[i][j] == 0的情况下,不需要再对上左两个方向的障碍物做判断,直接相加即可,因为障碍物点对应的dp值一定为0,代码如下
def uniquePathsWithObstacles(obstacleGrid):if not obstacleGrid or obstacleGrid[0][0] == 1:return 0m, n = len(obstacleGrid), len(obstacleGrid[0])# 初始化dp数组为0dp = [[0] * n for _ in range(m)]dp[0][0] = 1# 初始化第一行for i in range(1, m):dp[i][0] = dp[i-1][0] if obstacleGrid[i][0] == 0 else 0# 初始化第一列for j in range(1, n):dp[0][j] = dp[0][j-1] if obstacleGrid[0][j] == 0 else 0# 遍历每个点计算到达该点的路径数量for i in range(1, m):for j in range(1, n):if obstacleGrid[i][j] == 0:dp[i][j] = dp[i-1][j] + dp[i][j-1]return dp[m-1][n-1]
总结
今天的题目开始能够更加直观地体会到按照动态规划五部曲分析题目的意义
相关文章:
秋招算法备战第39天 | 62.不同路径、63. 不同路径 II
62. 不同路径 - 力扣(LeetCode) 按照动态规划五部曲走,非常清晰 class Solution:def uniquePaths(self, m: int, n: int) -> int:dp [[0 for _ in range(n)] for _ in range(m)]for i in range(m):dp[i][0] 1for j in range(n):dp[0][…...
Docker网络模型使用详解(2)Docker网络模式
安装Docker时会自动创建3个网络,可以使用docker network ls命令列出这些网络。 [rootlocalhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE ebcfad6f4255 bridge bridge local b881c67f8813 compose_lnmp_lnmp…...
Docker DCT
DOCKER_CONTENT_TRUST 如何使用Docker Content Trust为容器确保安全?-51CTO.COM...
【owt】erzio的handler和pipeline
【owt】erzio的PipelineBase::addService licode学习之erizo篇–Pipeline_handle 大神分析的非常细致: 大神 总结:erizo的pipeline的handler是负责实际数据处理的,通过处理链路,将之串联起来 大神还绘制了基础类图: pipleline 负责读写数据包并处理数据包 创建:static Pt…...
Dockerfile构建mysql
使用dockerfile构建mysql详细教学加案例 Dockerfile 文件 # 使用官方5.6版本,latest为默认版本 FROM mysql:5.6 #复制my.cof至容器内 ADD my.cnf /etc/mysql/my.cof #设置环境变量 密码 ENV MYSQL_ROOT_PASSWORD123456my.cof 文件 [mysqld] character-set-server…...
QT-如何生成唯一ID
在Qt中,我们可以使用QUuid类来生成唯一的ID。QUuid是一个用于操作通用唯一标识符(UUID)的类,它可以生成符合RFC4122标准的UUID。 以下是一个示例代码,演示了如何使用QUuid生成唯一的ID: #include <QAp…...
Go语言基础: Switch语句、Arrays数组、Slices切片 详细教程案例
文章目录 一. Switch语句1. Default case2. Multiple expressions in case3. Expressionless switch4. Fallthrough5. break6. break for loop 二. Arrays数组1. when arrays are passed to functions as parameters2. Iterating arrays using range3.Multidimensional arrays …...
从URL取值传给后端
从URL传值给后端 http://127.0.0.1:8080/blog_content.html?id8点击浏览文章详情,跳转至详情页面 从 url 中拿出文章 id,传给后端 首先拿到url然后判断是否有值,从问号后面取值params.split(&) 以 & 作为分割然后遍历字符数组 param…...
API接口用例生成器
一、前言 随着自动化测试技术的普及,已经有很多公司或项目,多多少少都会进行自动化测试。 目前本部门的自动化测试以接口自动化为主,接口用例采用 Excel 进行维护,按照既定的接口用例编写规则,对于功能测试人员来说只…...
最新AI创作系统ChatGPT源码V2.5.8/支持GPT4.0+GPT联网提问/支持ai绘画Midjourney+Prompt+MJ以图生图+思维导图生成!
使用Nestjs和Vue3框架技术,持续集成AI能力到系统! 最新版【V2.5.8】更新: 新增 MJ 官方图片重新生成指令功能同步官方 Vary 指令 单张图片对比加强 Vary(Strong) | Vary(Subtle)同步官方 Zoom 指令 单张图片无限缩放 Zoom out 2x | Zoom ou…...
【Vxworks】映射物理地址为虚拟地址,并获取此地址的存放值
最近开始接触Vxworks,得知Vx中不可对物理地址直接操作,需要先转为虚拟地址。 本文则将介绍此实现方法。 1. 物理地址映射为虚拟地址 采用pmapGlobalMap接口,对从0xf0000000开始,大小为0x1000的地址空间进行映射,得到…...
C/C++可变参数列表
可变参数列表 可变参数宏--__VA_ARGS__C风格不定参使用补充知识:函数调用时参数的压栈顺序及内存使用使用不定参模拟实现printf C风格不定参数的使用 可变参数宏–VA_ARGS #include <stdio.h>//...表示不定参,__VA_ARGS__使用不定参 // __FILE__ …...
MongoDB基本命令使用
成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据库的一些操作。 输入help可以看到基本操作命令: show dbs:显示数据库列表 show collections:显示当前数据库中的集合(类似关系数据库中的表…...
uniapp 微信小程序 上下滚动的公告通知(只取前3条)
效果图: <template><view class"notice" click"policyInformation"><view class"notice-icon"><image mode"aspectFit" class"img" src"/static/img/megaphone.png"></i…...
OSPF在MGRE上的实验
实验题目如下: 实验拓扑如下: 实验要求如下: 【1】R6为ISP只能配置ip地址,R1-5的环回为私有网段 【2】R1/4/5为全连的MGRE结构,R1/2/3为星型的拓扑结构,R1为中心站点 【3】所有私有网段可以互相通讯&…...
什么样的跨网文件安全交换系统 可实现安全便捷的文件摆渡?
进入互联网时代,网络的运算和数据管理能力助力各个行业高速发展,但同样带来了一些网络安全隐患,网络攻击、数据窃取、敏感信息泄露等问题。为此,我国出台了系列政策来全面提升银各行业系统网络安全整体防护水平,其中“…...
C语言memset函数的作用
memset函数是C语言中的一个库函数,其作用是将一块内存区域的每个字节都设置为指定的值。 memset函数的原型如下: void *memset(void *ptr, int value, size_t num); 参数解释: ptr:指向要填充的内存区域的指针。value࿱…...
暑假刷题第23天--8/7
D-游游的k-好数组_牛客周赛 Round 6 (nowcoder.com)(关键--a[1]a[k1]) #include<iostream> #include<algorithm> using namespace std; const int N100005; int a[N]; typedef pair<int,int>PII; PII b[N]; void solve(){int n,k,x;…...
Double DQN缓解动作价值的高估问题
1、算法: Selection using DQN: a ⋆ argmax a Q ( s t 1 , a ; w ) . a^{\star}\operatorname*{argmax}_{a}Q(s_{t1},a;\mathbf{w}). a⋆aargmaxQ(st1,a;w). Evaluation using target network: y t r t γ ⋅ Q ( s t 1 , a ⋆ ; w − )…...
【C#学习笔记】内存管理
文章目录 分配内存释放内存GC标记清除算法分代算法大对象和小对象 .NET的GC机制有这样两个问题: 官方文档 自动内存管理 自动内存管理是CLR在托管执行过程中提供的服务之一。 公共语言运行时的垃圾回收器为应用程序管理内存的分配和释放。 对开发人员而言…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
