题目描述:

机器人在一个无限大小的网格上行走,从点 (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、模拟行走机器人相关推荐

  1. 5911. 模拟行走机器人 II

    5911. 模拟行走机器人 II 给你一个在 XY 平面上的 width x height 的网格图,左下角 的格子为 (0, 0) ,右上角 的格子为 (width - 1, height - 1) ...

  2. leetcode -874 - 模拟行走机器人 - java版

    文章目录 题目 代码 题目 机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方.该机器人可以接收以下三种类型的命令: -2:向左转 90 度 -1:向右转 90 度 1 < ...

  3. 【leetcode-python-22】874. 模拟行走机器人

    [leetcode-python-22]874. 模拟行走机器人 渣渣原始版(超时啦!) 官方版(57.64%) leetcode 874. 模拟行走机器人 渣渣原始版(超时啦!) class Sol ...

  4. Leetcode题874、模拟行走机器人(Python题解)

    问题: 题目来源:力扣(LeetCode) leetcode874.模拟行走机器人 难度:简单 分析: 逻辑模拟. 几个小技巧: 1.list是顺序查找,set是哈希查找,所以set会很快.set实际 ...

  5. LeetCode 2069. 模拟行走机器人 II(模拟)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个在 XY 平面上的 width x height 的网格图,左下角 的格子为 (0, 0) ,右上角 的格子为 (width - 1, heigh ...

  6. LeetCode 874. 模拟行走机器人(set)

    1. 题目 机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方.该机器人可以接收以下三种类型的命令: -2:向左转 90 度 -1:向右转 90 度 1 <= x < ...

  7. 874. 模拟行走机器人

    2020-02-09 1.题目描述 根据一定的规则,模拟机器人行走. 2.解答 直接进行模拟即可. 3.代码 超时代码 #include <iostream> #include <a ...

  8. Leetcode 874. 模拟行走机器人 (模拟,一步一步的走)

    这里可以将obstacles存在set中,这里有一个坐标hash的问题,Python用tuple可以直接搞,C++需要自己实现hash算法.可以用set解决. class Solution:def r ...

  9. [leetcode] 874. 行走机器人模拟(周赛)

    874. 行走机器人模拟 模拟 描述方向时有个技巧:int[][] dx = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; 分别存储机器人向上.右.下.左走时,坐标应该如何变 ...

  10. 易驾佳智能机器人教练_学车吗?全智能模拟+车载机器人教练,让你轻松学车...

    在绵阳某驾校全智能模拟室里,学员们正坐在全智能模拟驾驶器上,根据电子屏幕上显示的路面状况和语音提示,操作离合器.油门.刹车等. 学员小林是一个初学者,正在进行科目二的相关练习.全智能模拟器提醒她,&q ...

最新文章

  1. 关于for循环处理列表的思考
  2. AJAX中日历控件的应用
  3. SOFAMosn 无损重启/升级
  4. 百词斩和扇贝打卡测试与评估
  5. php下的原生ajax请求
  6. [html] const nums1 = [1, 2, 2, 1], nums2 = [2] 交集是什么?
  7. python图形界面编程库_Python支持哪些图形界面的第三方库
  8. ftp加速传输java_Java FTPClient 大量数据传输的问题(未解决)
  9. 查看邮箱号是否存在_腾讯企业邮箱--新版本
  10. Kali linux 2016.2(Rolling)之 Nessus安装及Plugins Download Fail 解决方法
  11. 18 个开源翻译工具帮助你的项目本地化
  12. cesium中实现热力图
  13. 建行手机银行4.0版本转账怎么不要求输入支付密码?
  14. 给你个使用NAS私有云服务器的理由
  15. 多示例学习 (multi-instance learning, MIL)学习路线 (分类)
  16. 适配器模式 个人理解+JAVA 小例子
  17. zookeeper 监控
  18. R语言基于库克距离统计量识别(Cook’s distance)对于回归模型性能或者预测影响(Influential observation)很大的观测样本、可视化库克距离并添加阈值线识别影响力大的样本
  19. e-Learning E-Learning应用四人谈
  20. ( 题解 )第六届蓝桥杯决赛试题 -- 完美正方形 (线段树 + 深搜)

热门文章

  1. Linux中各种 command not found问题解决
  2. 公众号要如何排版?这几个必备公众号排版技巧千万不要错过哦
  3. 计算机exsl表f4代表锁定,Excel中F4技巧,相对引用、绝对引用和混合引用
  4. 2014年9月-前端开发月刊
  5. U盘/移动硬盘 有写保护怎么解除【未解决】
  6. webpack源码解析系列(一)
  7. 微信公众号数据2019_微信公众号精准数据对比 让公众号运营更顺利
  8. Java程序员培训班有用吗?是否专业
  9. 【深度学习】人物图片标签生成
  10. 【VScode实用生产力插件】