机器人大冒险
2020-11-20 10:17
106 查看
机器人初始位置在原点(0, 0)。小伙伴事先给机器人输入一串指令command,机器人就会无限循环这条指令的步骤进行移动。指令有两种:
U: 向y轴正方向移动一格 R: 向x轴正方向移动一格。 不幸的是,在 xy 平面上还有一些障碍物,他们的坐标用obstacles表示。机器人一旦碰到障碍物就会被损毁。
给定终点坐标(x, y),返回机器人能否完好地到达终点。如果能,返回true;否则返回false。
输入:command = "URR", obstacles = [], x = 3, y = 2 输出:true 解释:U(0, 1) -> R(1, 1) -> R(2, 1) -> U(2, 2) -> R(3, 2)。
输入:command = "URR", obstacles = [[2, 2]], x = 3, y = 2 输出:false 解释:机器人在到达终点前会碰到(2, 2)的障碍物。
输入:command = "URR", obstacles = [[4, 2]], x = 3, y = 2 输出:true 解释:到达终点后,再碰到障碍物也不影响返回结果。
class Solution { public boolean robot(String command, int[][] obstacles, int x, int y) { char[] c = command.toCharArray(); int xSteps = 0; int ySteps = 0; int[][] path = new int[c.length][2]; for (int i = 0; i < c.length; i++) { switch (c[i]) { case 'U': ySteps++; break; case 'R': xSteps++; break; } path[i][0] = xSteps; path[i][1] = ySteps; } for (int[] o : obstacles) { if (o[0] >= x && o[1] >= y) { continue; } if (check(path, o[0], o[1], xSteps, ySteps)) { return false; } } return check(path, x, y, xSteps, ySteps); } private static boolean check(int[][] path, int xo, int yo, int xSteps, int ySteps) { for (int[] p : path) { if (((xo - p[0]) % xSteps == 0 && (yo - p[1]) % ySteps == 0) && ((xo - p[0]) / xSteps == (yo - p[1]) / ySteps)) { return true; } } return false; } }
相关文章推荐
- ThreadLocal应用及源码分析
- egrep命令
- istio in kubernetes (一) --原理篇
- 深入理解h2和r2dbc-h2
- Java支付项目实战教程,包括支付宝,微信等支付方式,不看亏!
- 苹果承认iPhone 12系列部分机型存“绿屏”等问题;马斯克身家暴涨,有望成全球第二大富豪;欢聚集团回应做空丨邦早报
- 独家首发|「哎呦喂AUV」定位于数字订单交付服务商,获千万元Pre-A轮融资
- 面试中AOP这样说,面试官只有一个字:服!
- Java学习之AWT GUI编程
- 解决MySQL的主从数据库没有同步的两种方法
- 假装网络工程师24——BGP路由反射器与联邦
- NO.A.0009——day04——idea的安装及配置教程
- Python爬虫利器一之Requests库的用法
- static关键字
- string类特点
- NO.A.0008——day03——流程控制语句/if、if else、switch、for
- NO.A.0007——day02——JDK9的shell、编译器
- NO.A.0006——day02——JAVA.方法入门
- 项目实战:Qt+FFmpeg录屏应用(支持帧率、清晰度设置)
- 教你如何使用docsify快速部署优美的在线文档