874。行走机器人模拟
难度:中等
主题:数组、哈希表、模拟
无限 XY 平面上的机器人从点 (0, 0) 开始,面向北。机器人可以接收这三种可能类型的命令的序列:
- -2:左转90度。
- -1:右转90度。
- 1
一些网格方块是障碍物。第 i 个障碍物位于网格点障碍物[i] = (xi, yi)。如果机器人遇到障碍物,那么它会留在当前位置并继续执行下一个命令。
返回机器人从原点得到的最大欧氏距离平方(即如果距离为5,则返回25)。
注意:
- 北意味着+Y方向。
- 东意味着+X方向。
- 南意味着-Y方向。
- 西意味着-X方向。
- [0,0] 内可能存在障碍物。
示例1:
- 输入: 命令 = [4,-1,3],障碍 = []
- 输出: 25
-
说明:机器人从 (0, 0) 开始:
- 向北移动 4 个单位到 (0, 4)。
- 右转。
- 向东移动 3 个单位到 (3, 4)。
- 机器人距离原点最远的点是 (3, 4),其平方为 32 + 42 = 25 个单位。
示例2:
- 输入: 命令 = [4,-1,4,-2,4],障碍 = [[2,4]]
- 输出: 65
-
说明:机器人从 (0, 0) 开始:
- 向北移动 4 个单位到 (0, 4)。
- 右转。
- 向东移动1个单位,被(2, 4)处的障碍物阻挡,机器人位于(1, 4)处。
- 左转。
- 向北移动 4 个单位到 (1, 8)。
- 机器人距离原点最远的点是 (1, 8),其平方为 12 + 82 = 65 个单位。
示例 3:
- 输入: 命令 = [6,-1,-1,6],障碍 = []
- 输出: 36
- 解释:机器人从 (0, 0) 开始:
- 向北移动 6 个单位到 (0, 6)。
- 右转。
- 右转。
- 向南移动 6 个单位到 (0, 0)。
- 机器人距离原点最远的点是 (0, 6),其平方为 62 = 36 个单位。
约束:
- 1 4
- 命令[i] 是 -2、-1 或 [1, 9] 范围内的整数。
- 0 4
- -3 * 104 i, yi 4
- 答案保证小于231
解决方案:
我们需要根据一系列命令在无限二维网格上模拟机器人的运动,并避开障碍物(如果有)。目标是确定机器人从原点到达的最大欧氏距离平方。
方法
-
方向处理:
- 机器人可以面向四个方向之一:北、东、南、西。
- 我们可以将这些方向表示为向量:
- 北:(0, 1)
- 东:(1, 0)
- 南:(0, -1)
- 西:(-1, 0)
-
转向:
- 左转(-2)会将方向逆时针旋转 90 度。
- 右转 (-1) 会将方向顺时针旋转 90 度。
-
运动:
- 对于每个移动命令,机器人都会朝当前方向移动,一次移动一个单位。如果遇到障碍物,它会根据该命令停止移动。
-
追踪障碍:
- 将障碍物列表转换为一组元组以便快速查找,让机器人快速判断是否会碰到障碍物。
-
距离计算:
- 跟踪机器人在运动过程中到达的距原点平方的最大距离。
让我们用 PHP 实现这个解决方案:874。行走机器人模拟
<?php /** * @param Integer[] $commands * @param Integer[][] $obstacles * @return Integer */ function robotSim($commands, $obstacles) { ... ... ... /** * go to ./solution.php */ } // Test cases echo robotSim([4,-1,3], []) . "\n"; // Output: 25 echo robotSim([4,-1,4,-2,4], [[2,4]]) . "\n"; // Output: 65 echo robotSim([6,-1,-1,6], []) . "\n"; // Output: 36 ?>
解释:
- 方向管理:我们使用向量列表来表示方向,可以轻松计算移动后的下一个位置。
- 障碍物检测:通过将障碍物存储在集合中,我们实现了 O(1) 时间复杂度来检查某个位置是否被障碍物阻挡。
- 距离计算:我们不断更新机器人移动时到达的最大平方距离。
测试用例
- 提供的示例测试用例用于验证解决方案:
- [4,-1,3] 没有障碍物应返回 25。
- [4,-1,4,-2,4] 有障碍物 [[2,4]] 应返回 65。
- [6,-1,-1,6] 没有障碍物应返回 36。
该解决方案有效地处理了问题约束并根据需要计算最大距离平方。
联系链接
如果您发现本系列有帮助,请考虑在 GitHub 上给 存储库 一个星号或在您最喜欢的社交网络上分享该帖子?。您的支持对我来说意义重大!
如果您想要更多类似的有用内容,请随时关注我:
- 领英
- GitHub
以上是。行走机器人模拟的详细内容。更多信息请关注PHP中文网其他相关文章!

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

PHP不是在消亡,而是在不断适应和进化。1)PHP从1994年起经历多次版本迭代,适应新技术趋势。2)目前广泛应用于电子商务、内容管理系统等领域。3)PHP8引入JIT编译器等功能,提升性能和现代化。4)使用OPcache和遵循PSR-12标准可优化性能和代码质量。

PHP的未来将通过适应新技术趋势和引入创新特性来实现:1)适应云计算、容器化和微服务架构,支持Docker和Kubernetes;2)引入JIT编译器和枚举类型,提升性能和数据处理效率;3)持续优化性能和推广最佳实践。

在PHP中,trait适用于需要方法复用但不适合使用继承的情况。1)trait允许在类中复用方法,避免多重继承复杂性。2)使用trait时需注意方法冲突,可通过insteadof和as关键字解决。3)应避免过度使用trait,保持其单一职责,以优化性能和提高代码可维护性。

依赖注入容器(DIC)是一种管理和提供对象依赖关系的工具,用于PHP项目中。DIC的主要好处包括:1.解耦,使组件独立,代码易维护和测试;2.灵活性,易替换或修改依赖关系;3.可测试性,方便注入mock对象进行单元测试。

SplFixedArray在PHP中是一种固定大小的数组,适用于需要高性能和低内存使用量的场景。1)它在创建时需指定大小,避免动态调整带来的开销。2)基于C语言数组,直接操作内存,访问速度快。3)适合大规模数据处理和内存敏感环境,但需谨慎使用,因其大小固定。

PHP通过$\_FILES变量处理文件上传,确保安全性的方法包括:1.检查上传错误,2.验证文件类型和大小,3.防止文件覆盖,4.移动文件到永久存储位置。

JavaScript中处理空值可以使用NullCoalescingOperator(??)和NullCoalescingAssignmentOperator(??=)。1.??返回第一个非null或非undefined的操作数。2.??=将变量赋值为右操作数的值,但前提是该变量为null或undefined。这些操作符简化了代码逻辑,提高了可读性和性能。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

WebStorm Mac版
好用的JavaScript开发工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 Linux新版
SublimeText3 Linux最新版

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。