机器人大冒险(能否到达终点)

一、题目

题目来源 LeetCode link

​ 力扣团队买了一个可编程机器人,机器人初始位置在原点(0, 0)。小伙伴事先给机器人输入一串指令command,机器人就会无限循环这条指令的步骤进行移动。指令有两种:

U: 向y轴正方向移动一格
R: 向x轴正方向移动一格。

​ 不幸的是,在 xy 平面上还有一些障碍物,他们的坐标用obstacles表示。机器人一旦碰到障碍物就会被损毁。

给定终点坐标(x, y),返回机器人能否完好地到达终点。如果能,返回true;否则返回false。

示例 1:

输入:command = “URR”, obstacles = [], x = 3, y = 2
输出:true
解释:U(0, 1) -> R(1, 1) -> R(2, 1) -> U(2, 2) -> R(3, 2)。
示例 2:

输入:command = “URR”, obstacles = [[2, 2]], x = 3, y = 2
输出:false
解释:机器人在到达终点前会碰到(2, 2)的障碍物。
示例 3:

输入:command = “URR”, obstacles = [[4, 2]], x = 3, y = 2
输出:true
解释:到达终点后,再碰到障碍物也不影响返回结果。

限制:

2 <= command的长度 <= 1000
command由U,R构成,且至少有一个U,至少有一个R
0 <= x <= 1e9, 0 <= y <= 1e9
0 <= obstacles的长度 <= 1000
obstacles[i]不为原点或者终点

二、解题思路

思路一

暴力解法。(超出内存限制

创建一个二维矩阵,在遍历obstacles,在每个障碍处做标记,然后循环command,遇到障碍,则返回false,最后到达终点则返回true。

思路二

空间复杂度O(1),时间复杂度O(m*n) m为command的长度,n为obstacles的长度

​ 题目要求command是循环走的,则每走一遍的x增加值、y增加值都是相同的。如“RUU",(R向右走,x+1;U向上走,y+1)每走一遍,则x+1,y+2。对于目的地x,y,让机器人先走k轮命令,( k=MIN{x / x_1, y / y_1} ),再走下一轮就到达或者超过目标点了,即走k轮后到达离终点距离只有一轮命令的位置。然后走一轮命令来判断是到达目的点还是超过目的点。

例如:指令 “URR” 执行完毕停留在(2,1)这个点,假若终点是(10000,5001),那么机器人执行 5000 次指令到达终点附近的点(10000,5000),在走下一轮时,就会到达终点。

方法boolean isArrive(String command, int x_0, int y_0, int x_tar, int y_tar)用来判断从点x_0,y_0走一轮command是否到达x_tar,y_tar。

第一步

​ 首先判断是否能到达终点,如果终点都到不了,就不用考虑障碍物了,直接return false。

第二步

​ 遍历obstacles[][] 数组中的每一个障碍物,如果机器人能到达障碍物,则return false。

三、代码

java

public class Rebot {public static boolean robot(String command, int[][] obstacles, int x, int y) {//x_1,y_1为走过一遍指令后的变化值int x_1 = 0, y_1 = 0;int k;for (int i = 0; i < command.length(); i++) {if (command.charAt(i) == 'U') {y_1++;} else {x_1++;}}//k表示走k遍指令k = Math.min(x / x_1, y / y_1);//x_tar,y_tar代表走过k轮后,剩下的距离int x_tar = x - k * x_1;int y_tar = y - k * y_1;//判断是否能到达终点if (!isArrive(command, 0, 0, x_tar, y_tar)) {return false;}//判断障碍物是否在行走路线上for (int i = 0; i < obstacles.length; i++) {k = Math.min(obstacles[i][0] / x_1, obstacles[i][1] / y_1);x_tar = obstacles[i][0] - k * x_1;y_tar = obstacles[i][1] - k * y_1;//只判断在目标点范围内的障碍物if (obstacles[i][0] <= x && obstacles[i][1] <= y && isArrive(command, 0, 0, x_tar, y_tar)) {return false;}}return true;}//判断机器人能否从起始点x_0,y_0到达一个目标点x_tar,y_tar//x_1,y_1为当前位置,x,y为目标位置public static boolean isArrive(String command, int x_0, int y_0, int x_tar, int y_tar) {for (int i = 0; i < command.length(); i++) {//判断目标点和起始点是否重合if (x_0 == x_tar && y_0 == y_tar) {return true;}//执行一轮命令if (command.charAt(i) == 'U') {y_0++;} else {x_0++;}}return false;}
}

机器人大冒险(能否到达终点)相关推荐

  1. 2022-02-22:机器人大冒险。 力扣团队买了一个可编程机器人,机器人初始位置在原点(0, 0)。小伙伴事先给机器人输入一串指令command,机器人就会无限循环这条指令的步骤进行移动。指令有两种

    2022-02-22:机器人大冒险. 力扣团队买了一个可编程机器人,机器人初始位置在原点(0, 0).小伙伴事先给机器人输入一串指令command,机器人就会无限循环这条指令的步骤进行移动.指令有两种 ...

  2. 机器人大冒险(二维数组)

    题目: 力扣团队买了一个可编程机器人,机器人初始位置在原点(0, 0).小伙伴事先给机器人输入一串指令command,机器人就会无限循环这条指令的步骤进行移动.指令有两种: U: 向y轴正方向移动一格 ...

  3. 领域应用 | 基于知识图谱的警用安保机器人大数据分析技术研究

    本文转载自公众号:警察技术杂志. 郝久月  樊志英   汪宁   王欣   摘   要:构建大数据支撑下的智能应用是公安信息化发展的趋势,警用安保机器人大数据分析平台的核心功能包括机器人智能人机交互和 ...

  4. bulter机器人_科普!九款使用率最高的物流机器人大盘点!

    原标题:科普!九款使用率最高的物流机器人大盘点! 说起快递的速度,中国可谓是跑在全球前列,因为强大的人力资源以及完善的供应链结构,导致整个运作过程很流畅快速.但是,如果在特殊的节点,即使增加成倍的快递 ...

  5. LeetCode 754. 到达终点数字(数学推理)

    1. 题目 在一根无限长的数轴上,你站在0的位置.终点在target的位置. 每次你可以选择向左或向右移动.第 n 次移动(从 1 开始),走 n 步. 返回到达终点需要的最小移动次数. 示例 1: ...

  6. 曾辉机器人_武昌理工学子在2020年中国机器人大赛中夺冠

    "它在过弯的时候非常稳,而且速度快,跑完一圈的时间比第二名少十秒左右."武昌理工学院学生余辉激动地说.11月27日从武昌理工学院获悉,在刚刚结束的2020中国机器人大赛中,武昌理工 ...

  7. 2022-04-26:给定四个整数 sx , sy ,tx 和 ty,如果通过一系列的转换可以从起点 (sx, sy) 到达终点 (tx, ty),则返回 true,否则返回 false。 从点 (x

    2022-04-26:给定四个整数 sx , sy ,tx 和 ty,如果通过一系列的转换可以从起点 (sx, sy) 到达终点 (tx, ty),则返回 true,否则返回 false. 从点 (x ...

  8. 机器人擂台的利剑_机器人大擂台2017

    机器人大擂台2017下载!机器人大擂台2017视频是首个机器人对战节目!机器人大擂台2017最新一集播出了,提供机器人大擂台2017,欢迎下载机器人大擂台2017! 机器人大擂台 <机器人大擂台 ...

  9. Java实现 LeetCode 780 到达终点(逻辑题)

    780. 到达终点 从点 (x, y) 可以转换到 (x, x+y) 或者 (x+y, y). 给定一个起点 (sx, sy) 和一个终点 (tx, ty),如果通过一系列的转换可以从起点到达终点,则 ...

  10. 754. 到达终点数字

    在一根无限长的数轴上,你站在0的位置.终点在target的位置. 每次你可以选择向左或向右移动.第 n 次移动(从 1 开始),可以走 n 步. 返回到达终点需要的最小移动次数. 示例 1: 输入: ...

最新文章

  1. LeetCode简单题之两个相同字符之间的最长子字符串
  2. C++ 之常对象,常对象成员
  3. MLP 之手写数字识别
  4. GDCM:gdcm::FileAnonymizer的测试程序
  5. 《openssl 编程》之错误处理
  6. leetcode(34)在排序数组中查找元素的第一个和最后一个位置
  7. RabbitMQ简单介绍+Windows环境安装
  8. [CQOI2014]通配符匹配
  9. 本地调试微信程序ngrok
  10. python数字图像处理(5):图像的绘制
  11. 华为云专家私房课:视频传输技术选型的三大法宝
  12. 自学python到什么程度就可以工作-零基础学到什么程度可以找一份python工作?Python学习路线规划...
  13. 03. 确保容器中的对象拷贝正确而高效
  14. sublime text编辑器修改python代码的缩进设风格
  15. java课程设计---彩票销售管理系统
  16. Java数据库的介绍和使用
  17. RabbitMQ入门中篇
  18. 高德足迹地图在哪里,高德地图怎么点亮城市?高德地图足迹地图查看方法
  19. 开发一款简单的百度小程序(由微信小程序迁移过来)
  20. 【编程题】判断一个多边形是否为凸多边形

热门文章

  1. iPhone iPad分辨率
  2. Pull request 团队合作开发使用详解
  3. JAVA小鑫の日常系列故事(七)——小纸条
  4. python里冒号什么意思_在Python中冒号等于(:=)是什么意思?
  5. 一文搞懂WiFi的所有知识点
  6. 关于过期更换ssl证书的相关问题
  7. android 怎样扩大内存卡,SD卡变RAM 增加虚拟内存方法
  8. 如何遮挡电影英汉字幕
  9. 根据银行卡号获取开户行和银行LOGO
  10. 产品思维训练 | 卖菜的店同时也卖水果,卖水果的店为什么不卖菜?