LeetCode.874-走路机器人模拟(Walking Robot Simulation)

LeetCode:机器人的不同路径问题(动态规划) 机器人的不同路径问题(动态规划) 阅读详情

这是悦乐书的第335次更新,第360篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第205题(顺位题号是874)。网格上的机器人从点(0,0)开始并朝北。机器人可以接收三种可能类型的命令之一:

  • -2:向左转90度。

  • -1:向右转90度。

  • 1 <= x <= 9:向前移动x个单位。

一些网格方块是障碍物。第i个障碍位于网格点(obstacles[i][0],obstacles[i][1])。如果机器人遇到障碍点,机器人将停留在障碍点前一个网格方格上(但仍然会继续执行剩下的指令。)返回机器人从原点开始的最大欧氏距离的平方。例如:

输入:commands = [4,-1,3],obstacles = []
输出:25
说明:机器人位于(3,4),3x3 + 4x4 = 25。


输入:commands = [4,-1,4,-2,4],obstacles = [[2,4]]
输出:65
说明:从(0,0)开始先向北走到(4,0),然后向右,此时朝东,往前走4步,但是在(2,4)遇到了障碍点,所以只能走到(1,4),而不是(4,4),在点(1,4)向左转,此时朝北,向前走4部,到达点(1,8),在(1,8)的平方和最大。

注意:

  • 0 <= commands.length <= 10000

  • 0 <= barriers.length <= 10000

  • -30000 <=障碍物[i] [0] <= 30000

  • -30000 <=障碍物[i] [1] <= 30000

  • 答案保证小于2 ^ 31。

02 解题

题目中有几个地方需要先解释下:

  • 机器人的朝向。初始时,机器人是朝北的,根据题目给的例子1,可以推算出,机器人的朝向和上北下南的方向一致。以(0,0)为原点看,向北就是指向y轴的正方向,向东就是指向x轴的正方向,另外两个方向同理。

  • 欧氏距离的平方。其实就是x坐标值和y坐标值的平方和,即X x X + Y x Y之和。

  • 机器人前进的方向。既然机器人有朝向的概念,那么其前进的方向也就包含了四个方向,上下左右,那么机器人前进的方向就具有了周期性,以4为周期。

在了解上面这些信息后,再来看这道题,会清晰很多。根据题目的介绍,commands数组中会遇到3种指令,-2时左转,-1时右转,剩下就是前进多少步了,但是前进的时候需要判断此方向上有没有障碍物,所以我们需要先将表示障碍物的二维数组处理一下,使用HashSet来存储,这样每次只需要判断HashSet中是否包含障碍点即可,而不必去遍历判断。

在机器人可能前进的四个方向上,我们定义一个二维数组,来表示四个方向,此处我们按照上右下左顺时针的方向来定义,你也可以从其他方向开始,只要后面计算周期的时候能够匹配就行。

在执行前进n步的指令时,我们是以1为单位前进,每执行一步就判断一次障碍点。在执行完前进指令后,需要进行比较最大值,最后输出结果值即可。

public int robotSim(int[] commands, int[][] obstacles) {
    int x = 0, y = 0, max = 0, index = 0;
    // 将障碍点初始化进HashSet中,以字符串的形式
    Set<String> set = new HashSet<String>();
    for (int[] arr : obstacles) {
        set.add(arr[0]+"-"+arr[1]);
    }
    // 四个方向,上右下左,index的取值范围是[0,3]
    int[][] directions = {{0,1},{1,0},{0,-1},{-1,0}};
    for (int n : commands) {
        if (n == -1) {
            index++;
            // 右转四次后会回到原点
            if (index == 4) {
                index = 0;
            }
        } else if (n == -2) {
            index--;
            // 左转一次相当于右转3次
            if (index == -1) {
                index = 3;
            }
        } else {
            // 前进n步,只要此方向上不包含障碍点
            while (n-- > 0 && !set.contains((x+directions[index][0])+
                    "-"+(y+directions[index][1]))) {
                x += directions[index][0];
                y += directions[index][1];
            }
        }
        max = Math.max(max, x*x+y*y);
    }
    return max;
}

03 小结

算法专题目前已连续日更超过六个月,算法题文章205+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

Leetcode 874:模拟行走机器人(超详细的解法!!!) 机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令: -2:向左转 90 度 -1:向右转 90 度 1 &lt;= x &lt;= 9:向前移动 x 个单位长度 在网格上有一些格子被视为障碍物。 第 i 个障碍物位于网格点 (obstacles[i][0], obstacles[i][1]) 如果机器人试图走到障碍物上方,那么它将... 阅读详情

相关推荐

LeetCode --- 874. Walking Robot Simulation 解题报告

A robot on an infinite XY-plane starts at point(0, 0)and faces north. The robot can receive one of three possible types ofcommands: -2: turn left90degrees, -1: turn right90degrees, or 1 <= k <= 9: move forwardkunits. Some of the grid squa...

杨鑫newlife的专栏 484

图解LeetCode——面试题13. 机器人的运动范围

的方式来移除最后一位,那么再次通过与10取余计算后,就取得了原数字的十位数字了,依次类推,直至所有数字的位数都截取出来。并且在每次获取最后一位的操作过程中,都进行加合计算,最终的结果就是某个数字的数位之和了。的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于。常用的方式是,通过与10取余(),那么对于深度遍历的方向来说,我们不需要考虑会使整个数位和变小的情况,即:向上遍历(”,我们可以采用二维数组或者哈希表的方式,记录走过的格子即可。

爪哇缪斯的博客 173

leetcode: 874. 模拟行走机器人

顺时针方向,先确定方向,然后一步一步走,遇到障碍就break,如果没有就更新坐标,计算距离,更新最大距离;障碍可以使用哈希表,加快查询速度。机器人在一个无限大小的 XY 网格平面上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令。返回从原点到机器人所有经过的路径点(坐标为整数)的最大欧式距离的平方。(即,如果距离为 5 ,则返回 25 )机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,但仍然可以继续尝试进行该路线的其余部分。在网格上有一些格子被视为障碍物。..

uncle_ll的博客 711

leetcode-1041. 困于环中的机器人

思路:根据题目要求,其实就是求机器人在经过有限次一样的指令变化下能回到初始点(0,0)吗?仔细琢磨可以发现,机器人要想回到初始点(0,0),要么经过第一次指令变化之后就已经回到初始点[1],要么经过两次一样的指令变化之后回到初始点[2],要么经过四次一样的指令变化之后回到初始点[3]。其他情况下(不考虑重复回到初始点的情况),机器人无论如何都无法回到初始点(0,0).在无限的平面上,机器人最初位于 (0, 0) 处,面朝北方。机器人按顺序执行指令 instructions,并一直重复它们。

坚持不懈的大白的博客 818

新手必看!Cisco Packet Tracer 8.2从安装到完成第一个局域网实验(附常见问题解决)

本文为网络新手提供了Cisco Packet Tracer 8.2的完整入门指南。从官方下载安装、界面熟悉,到核心的拖拽设备、连线、配置IP地址三步操作,手把手教你完成第一个局域网组网实验。文章重点讲解了如何通过Ping命令验证连通性,并附带了连线错误、IP配置不当等常见问题的解决思路,帮助初学者快速上手这款强大的思科模拟器。

android的专栏 867

rk628d修改默认分辨率

在rk3568上使用628d hdmi转mipi,在628d已经调试好的情况下,客户新增需求:视频输入这边的推荐分辨率固定在1024x768。

m0_60805802的博客 2053

Leetcode 874. 模拟行走机器人

设映射后的数字为kx+y,我们想知道k为多少时不会发生碰撞。当碰撞时kx1+y1=kx2+y2,解出来k=(y2-y1)/(x1-x2),由于x,y的取值范围为[-30000,30000],那么k的取值范围为[-60000,60000],这个范围内的值都可能碰撞,比如k=60000时,(1,-30000)和(0,30000)算出来都是30000。除了以上,还要去想上下左右下标变换。嗯,很有意思的一个题。

JehanRio's Private Blog 223

枪支/刀具检测 (gun, knife) - SIXray, Clasp Dataset,YOLOv11+UI界面+数据集

python复制编辑# 计算 CIoU 损失。

YOLO 539

LeetCode·每日一题·874. 模拟行走机器人·哈希

哈希

m0_64560763的博客 688

高匿反爬实战:Python打造无痕爬虫,规避风控系统追踪

网络层匿踪:核心是使用住宅IP代理池,按真实用户IP画像匹配,控制请求频率;协议层匿踪:动态生成请求头(每次都不同),参数添加随机噪声,避免规律化;行为层匿踪:模拟人类的非规律行为(贝塞尔轨迹、随机停顿、非精准点击);设备层匿踪:伪造Canvas/WebGL指纹,禁用webdriver标识,每次请求更换指纹;核心原则:无痕爬虫的本质是“无限接近真实用户”,所有维度都要消除爬虫特征,而非单一维度伪装。打造真正的无痕爬虫需要全维度的匿踪策略,单一维度的伪装极易被高级风控系统识别。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2642

【Qt开发】管理OpenGL上下文QOpenGLContext类及应用实践示例代码

QOpenGLContext 提供了一个简单、高效的接口来管理 OpenGL 上下文。本文详细介绍了 QOpenGLContext 的基本功能、常用方法、信号槽机制、高级应用技巧及常见问题的解决方法。通过这些介绍,读者可以更好地掌握和利用 QOpenGLContext 进行 OpenGL 渲染和管理实验。对于有特殊需求的开发者,也可以通过探索更多高级设置和优化策略,以满足具体的应用场景。

科技改变人类,技术成就未来 1872

[LeetCode] Walking Robot Simulation 走路机器人仿真

A robot on an infinite grid starts at point (0, 0) and faces north. The robot can receive one of three possible types of commands: -2: turn left 90 degrees -1: turn right 90 degrees 1 <= x <=...

weixin_30920597的博客 225

提取游戏音频文件.bnk

bnk其实是一种对音频的加密方式,一个.bnk文件中通常包含了多个语音文件,一般可以使用Wwise-Unpacker来解码.bnk格式文件该工具命名没有规律,需要手动整理文件名。市面上很多的游戏都把音频文件打成.bnk文件(比如永劫无间),用这种方式可以将你想要的游戏的音频都提取出来,本文内容仅供自己娱乐。

类人_猿的博客 8745

LeetCode 874. Walking Robot Simulation C++

874. Walking Robot Simulation A robot on an infinite grid starts at point (0, 0) and faces north. The robot can receive one of three possible types of commands: -2: turn left 90 degrees -1: turn r...

WXM 499

uniapp | 基于高德地图实现位置选择功能(安卓端)

在uni-app项目中实现地图位置选择功能的解决方案。由于uni.chooseLocation功能受限,采用高德地图API自主开发。系统由父组件poiMap.vue(负责展示和跳转)和子组件poiBox.vue(核心地图逻辑)构成,通过父子组件通信传递位置数据。关键技术包括:1)使用AMapLoader动态加载地图SDK;2)集成PositionPicker实现拖拽选点;3)异步加载AMapUI插件;4)通过事件监听获取位置详情(地址/经纬度)。

大胆尝试,小心实践 731

一文吃透 ABAP RESTful Application Programming Model(RAP):从数据建模与行为,到业务服务暴露,再到服务消费

本文介绍了SAP ABAP统一编程模型RAP的核心架构与实践方法,通过构建完整的ZTRAVEL和ZBOOKING业务对象,演示了从数据建模、行为定义到服务暴露的全流程。文章详细说明了RAP三层架构(数据与行为层、服务提供层、服务消费层)的实现方式,包括CDS视图实体定义、行为定义(BDEF)中的事务能力声明、投影与服务绑定等关键步骤。特别强调了ABAP Cloud环境下的开发限制和最佳实践,如使用GUID和late numbering机制,以及如何通过EML语言操作业务对象。最后提供了完整的代码示例,展示了

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 521

LeetCode第874题解析

机器人在一个无限大小的网格上行走,从点(0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令: -2:向左转90 度 -1:向右转 90 度 1 <= x <= 9:向前移动x个单位长度 在网格上有一些格子被视为障碍物。 第 i个障碍物位于网格点 (obstacles[i][0], obstacles[i][1]) 机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,但仍然可以继续该路线的其余部分。 返回从原点到机器人所有经过的路径点(坐标为整数...

blue_coffeei的博客 624

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

LeetCode - 874 - 模拟行走机器人(walking-robot-simulation)

一 目录 不折腾的前端,和咸鱼有什么区别目录一 目录二 前言三 解题及测试四 LeetCode Submit五 解题思路二 前言 难度:简单涉及知识:贪心算法题目地址:https://l...

weixin_41806099的博客 388

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LeetCode高频题62. 不同路径:机器人从左上角到右下角的路径有多少条?纯概率排列组合问题,而不是动态规划题

1)本题,实际上最大的收货,在于我们如何求排列组合C(n,k),防止分子分母越界溢出int,那就要通过不断求ab最大公约数gcd来约,这样不会溢出,在单调栈那求C(k,2),当时问题规模很小,不需要这样复杂 2)另外,ab的最大公约数,死记硬背,就是gcd(a,b)=b==0?a:gcd(b,a%b); 3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。...

weixin_46838716的博客 1097

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

​LeetCode解法汇总874. 模拟行走机器人

遍历commands的时候,方向自然不用说,如果遇到了前进或者后退,则判断当前轴距离原点最近的点长度,如果大于command则移动command,否则移动最近长度。* 但是commands的遍历肯定是要的,所以我们就想办法解决obstacles,把其变为一个O(1)或者O(lgn)复杂度的查询。机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,但仍然可以继续尝试进行该路线的其余部分。3. 向东移动 1 个单位,然后被位于 (2, 4) 的障碍物阻挡,机器人停在 (1, 4)

分享+记录 1239

剑指offer刷题(十)难点

机器人的运动范围 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子? 示例 1: 输入:m = 2, n = 3, k = 1 输出:3 示例 2: 输入

qq_30312047的博客 635

leetcode-874. 模拟行走机器人

机器人在一个无限大小的网格上行走,从点(0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令: -2:向左转90 度 -1:向右转 90 度 1 <= x <= 9:向前移动x个单位长度 在网格上有一些格子被视为障碍物。 第i个障碍物位于网格点 (obstacles[i][0], obstacles[i][1]) 如果机器人试图走到障碍物上方,那...

Geek_sun的博客 497

LeetCode874 模拟行走机器人

理解本题的题意很关键,机器人在(0,0)点开始行走,如果(0,0)点有障碍怎么办,这种情况是不管它,开始下一步行走,一旦机器人离开(0,0)点,这个点的障碍物才生效,后面如果回到此点则不能跨过此障碍。也就是说我们需要先走一步,再去判断这一步是否有效,有效则更新坐标,否则原地不动,继续下一次动作。至于右转和左转实际就是改变机器人的朝向,起初机器人向北,右转则朝向东,左转则朝向西。不同的朝向,意味着向...

Jeff_Winger的博客 1942

LeetCode 874 题解

874. Walking Robot Simulation 题目大意:二维空间,从原点出发 ,4个方向,走, 路上有障碍,有障碍的地方不能走。 解题思路:模拟 #define mp make_pair /* 0north 1east 2south 3west */ int dx[]={0,1,0,-1}; int dy[]={1,0,-1,0}; class Solution { pu...

u011439455的博客 713
上一篇: LeetCode.872-叶子值相等的树(Leaf-Similar Trees)
下一篇: LeetCode.876-链表的中间节点(Middle of the Linked List)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值