177、模拟行走机器人
题目描述:
机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令:
-2:向左转 90 度
-1:向右转 90 度
1 <= x <= 9:向前移动 x 个单位长度
在网格上有一些格子被视为障碍物。
第 i 个障碍物位于网格点 (obstacles[i][0], obstacles[i][1])
如果机器人试图走到障碍物上方,那么它将停留在障碍物的前一个网格方块上,但仍然可以继续该路线的其余部分。
返回从原点到机器人的最大欧式距离的平方。
示例 1:
输入: commands = [4,-1,3], obstacles = []
输出: 25
解释: 机器人将会到达 (3, 4)
示例 2:
输入: commands = [4,-1,4,-2,4], obstacles = [[2,4]]
输出: 65
解释: 机器人在左转走到 (1, 8) 之前将被困在 (1, 4) 处
提示:
0 <= commands.length <= 10000
0 <= obstacles.length <= 10000
-30000 <= obstacle[i][0] <= 30000
-30000 <= obstacle[i][1] <= 30000
答案保证小于 2 ^ 31
代码:
class Solution {public int robotSim(int[] commands, int[][] obstacles) {int[] dx = new int[]{0, 1, 0, -1};int[] dy = new int[]{1, 0, -1, 0};int x = 0, y = 0, di = 0;// Encode obstacles (x, y) as (x+30000) * (2^16) + (y+30000)Set<Long> obstacleSet = new HashSet();for (int[] obstacle: obstacles) {long ox = (long) obstacle[0] + 30000;long oy = (long) obstacle[1] + 30000;obstacleSet.add((ox << 16) + oy);}int ans = 0;for (int cmd: commands) {if (cmd == -2) //leftdi = (di + 3) % 4;else if (cmd == -1) //rightdi = (di + 1) % 4;else {for (int k = 0; k < cmd; ++k) {int nx = x + dx[di];int ny = y + dy[di];long code = (((long) nx + 30000) << 16) + ((long) ny + 30000);if (!obstacleSet.contains(code)) {x = nx;y = ny;ans = Math.max(ans, x*x + y*y);}}}}return ans;}
}
官方解释
177、模拟行走机器人相关推荐
- 5911. 模拟行走机器人 II
5911. 模拟行走机器人 II 给你一个在 XY 平面上的 width x height 的网格图,左下角 的格子为 (0, 0) ,右上角 的格子为 (width - 1, height - 1) ...
- leetcode -874 - 模拟行走机器人 - java版
文章目录 题目 代码 题目 机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方.该机器人可以接收以下三种类型的命令: -2:向左转 90 度 -1:向右转 90 度 1 < ...
- 【leetcode-python-22】874. 模拟行走机器人
[leetcode-python-22]874. 模拟行走机器人 渣渣原始版(超时啦!) 官方版(57.64%) leetcode 874. 模拟行走机器人 渣渣原始版(超时啦!) class Sol ...
- Leetcode题874、模拟行走机器人(Python题解)
问题: 题目来源:力扣(LeetCode) leetcode874.模拟行走机器人 难度:简单 分析: 逻辑模拟. 几个小技巧: 1.list是顺序查找,set是哈希查找,所以set会很快.set实际 ...
- LeetCode 2069. 模拟行走机器人 II(模拟)
文章目录 1. 题目 2. 解题 1. 题目 给你一个在 XY 平面上的 width x height 的网格图,左下角 的格子为 (0, 0) ,右上角 的格子为 (width - 1, heigh ...
- LeetCode 874. 模拟行走机器人(set)
1. 题目 机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方.该机器人可以接收以下三种类型的命令: -2:向左转 90 度 -1:向右转 90 度 1 <= x < ...
- 874. 模拟行走机器人
2020-02-09 1.题目描述 根据一定的规则,模拟机器人行走. 2.解答 直接进行模拟即可. 3.代码 超时代码 #include <iostream> #include <a ...
- Leetcode 874. 模拟行走机器人 (模拟,一步一步的走)
这里可以将obstacles存在set中,这里有一个坐标hash的问题,Python用tuple可以直接搞,C++需要自己实现hash算法.可以用set解决. class Solution:def r ...
- [leetcode] 874. 行走机器人模拟(周赛)
874. 行走机器人模拟 模拟 描述方向时有个技巧:int[][] dx = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; 分别存储机器人向上.右.下.左走时,坐标应该如何变 ...
- 易驾佳智能机器人教练_学车吗?全智能模拟+车载机器人教练,让你轻松学车...
在绵阳某驾校全智能模拟室里,学员们正坐在全智能模拟驾驶器上,根据电子屏幕上显示的路面状况和语音提示,操作离合器.油门.刹车等. 学员小林是一个初学者,正在进行科目二的相关练习.全智能模拟器提醒她,&q ...
最新文章
- 关于for循环处理列表的思考
- AJAX中日历控件的应用
- SOFAMosn 无损重启/升级
- 百词斩和扇贝打卡测试与评估
- php下的原生ajax请求
- [html] const nums1 = [1, 2, 2, 1], nums2 = [2] 交集是什么?
- python图形界面编程库_Python支持哪些图形界面的第三方库
- ftp加速传输java_Java FTPClient 大量数据传输的问题(未解决)
- 查看邮箱号是否存在_腾讯企业邮箱--新版本
- Kali linux 2016.2(Rolling)之 Nessus安装及Plugins Download Fail 解决方法
- 18 个开源翻译工具帮助你的项目本地化
- cesium中实现热力图
- 建行手机银行4.0版本转账怎么不要求输入支付密码?
- 给你个使用NAS私有云服务器的理由
- 多示例学习 (multi-instance learning, MIL)学习路线 (分类)
- 适配器模式 个人理解+JAVA 小例子
- zookeeper 监控
- R语言基于库克距离统计量识别(Cook’s distance)对于回归模型性能或者预测影响(Influential observation)很大的观测样本、可视化库克距离并添加阈值线识别影响力大的样本
- e-Learning E-Learning应用四人谈
- ( 题解 )第六届蓝桥杯决赛试题 -- 完美正方形 (线段树 + 深搜)