力扣LCP3机器人大冒险
力扣团队买了一个可编程机器人,机器人初始位置在原点(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]不为原点或者终点
待会的代码由两部分组成:
最前面的一个robot2方法效果较好,无论对于数据量过大的还是其他的情况,效果都还可以忍受,它的思路是将障碍物位置转化为目的地,因为有些障碍物根本无法到达,所以我们可以很轻松的排除掉一些,其次由于障碍物的数量总是有限的,不值当我们每走一步路就去判断是否撞上了,这样就会减少很多时间。我们将所有障碍物遍历完后,若是能到达障碍物则说明会碰撞上。否则,再遍历真正目的地若是能到达则返回真,不能到达返回假
后面的robot方法是每走一步路就对其是否碰撞进行检测,说实话效果在数据量比较大的时候不是很好。诸君且看吧
package medium;import java.util.Arrays;public class robottest {//换一个思路,把每个障碍物,看作是目的地,看看其能否到达public boolean robot2(String command, int[][] obstacles, int x, int y) {boolean flag=false;for(int i=0;i<obstacles.length;i++){int i1= obstacles[i][0];int i2= obstacles[i][1];if(i1<=x&&i2<=y)flag=isAcess(command,i1,i2);if(flag==true)return false;}flag=isAcess(command, x, y);return flag;}public boolean isAcess(String command,int x,int y){int xNum=0;int yNum=0;int[] position=new int[2];while(xNum!=x||yNum!=y){for(int i=0;i<command.length()&&(position[0]!=x||position[1]!=y);i++){char c=command.charAt(i);if(c=='U')position[1]=position[1]+1;else if(c=='R')position[0]=position[0]+1;}xNum=position[0];yNum=position[1];if(xNum>x&&yNum>y)return false;}if(position[0]==x&&position[1]==y){return true;}return false;}//对于大数据量效果不好的算法public boolean robot(String command, int[][] obstacles, int x, int y) {int xNum=0;int yNum=0;boolean flag=false;int[] position=new int[2];while(xNum!=x&&yNum!=y){for(int i=0;i<command.length()&&(position[0]!=x||position[1]!=y);i++){char c=command.charAt(i);if(c=='U')position[1]=position[1]+1;else if(c=='R')position[0]=position[0]+1;flag=obstacles.length>0?isBone(position,obstacles):false;if(flag)return false;}obstacles=obstacles.length>0?Haveob(obstacles):obstacles;xNum=position[0];yNum=position[1];if(xNum>x&&yNum>y)return false;}if(position[0]==x&&position[1]==y){return true;}return false;}private int[][] Haveob(int[][] obstacles) {int j=0;for(int i=0;i<obstacles.length;i++){if(obstacles[i][0]!=-1)j++;}int[][] re=new int[j][2];int k=0;for(int i=0;i<obstacles.length;i++){if(obstacles[i][0]!=-1){re[k][0]=obstacles[i][0];re[k][1]=obstacles[i][1];k++;}}return re;}private boolean isBone(int[] position, int[][] obstacles) {boolean flag=false;for(int i=0;i<obstacles.length;i++){if(obstacles[i][0]==position[0]&&obstacles[i][1]==position[1]){flag=true;break;}if(obstacles[i][0]<position[0]||obstacles[i][1]<position[1]){obstacles[i][0]=-1;obstacles[i][1]=-1;}}return flag;}public static void main(String[] args) {robottest r=new robottest();String command="UUR";//"RUR";//"URR";"RUR"int[] p={1,1};int[][] s={};//{{9, 5}, {7, 5}, {6, 10}, {8, 9}, {4, 2}, {8, 3}, {3, 2}};//{3, 9}, {7, 1}, {10, 5}, {6, 3}, {4, 3}, {1, 0}, {6, 5}};//{{2,2}};System.out.println(r.robot(command,s,1,4)); System.out.println(r.robot2(command,s,1,4));}}
力扣LCP3机器人大冒险相关推荐
- 2022-02-22:机器人大冒险。 力扣团队买了一个可编程机器人,机器人初始位置在原点(0, 0)。小伙伴事先给机器人输入一串指令command,机器人就会无限循环这条指令的步骤进行移动。指令有两种
2022-02-22:机器人大冒险. 力扣团队买了一个可编程机器人,机器人初始位置在原点(0, 0).小伙伴事先给机器人输入一串指令command,机器人就会无限循环这条指令的步骤进行移动.指令有两种 ...
- 机器人大冒险(二维数组)
题目: 力扣团队买了一个可编程机器人,机器人初始位置在原点(0, 0).小伙伴事先给机器人输入一串指令command,机器人就会无限循环这条指令的步骤进行移动.指令有两种: U: 向y轴正方向移动一格 ...
- LeetCode 2019 力扣杯全国秋季编程大赛
文章目录 1. 比赛结果 2. 题目解析 2.1 猜数字 Easy 2.2 分式化简 Esay 2.3 机器人大冒险 Medium 2.4 覆盖 Hard 2.5 发 LeetCoin Hard 1. ...
- LeetCode 2020 力扣杯全国春季编程大赛(1644/4093,前40.2%)
文章目录 1. 比赛结果 2. 题目解析 2.1 拿硬币 Easy 2.2 传递信息 Esay 2.3 剧情触发时间 Medium 2.4 最小跳跃次数 Hard 2.5 二叉树任务调度 Hard 1 ...
- 力扣随机数randX——透过现象看本质之二元独立随机分布
用randX 实现 randY(X < Y) 其中,randN表示等概生成[1,N]的数 从一个力扣上的例子来引入吧 470. 用 Rand7() 实现 Rand10() 最直观的想法是用ran ...
- Day6-2021.1.14 计算机网络面经从基础到总结+力扣 链表 题目的整理。
2021年1月14日 时间都去哪了? 今日计划: 1.力扣刷题.整理下剑指offer,按照分类去做.LeetCode题解汇总-链表专题. 2.整理计网面经.如果要走后端的话,这篇面经基本很全了,把这篇 ...
- 力扣杯2023春-个人赛、战队赛
文章目录 力扣杯2023春-个人赛 [LCP 72. 补给马车](https://leetcode.cn/problems/hqCnmP/) 模拟 [LCP 73. 探险营地](https://lee ...
- 【算法竞赛】力扣杯春赛-个人赛 LCCUP‘23复盘
力扣杯春赛-个人赛 LCCUP'23 LCP 72. 补给马车 关键词:模拟 题目来源:LCP 72. 补给马车 - 力扣(Leetcode) 题目描述 T模拟 远征队即将开启未知的冒险之旅,不过在此 ...
- 【算法比赛】2020 力扣杯!Code Your Future 春季全国编程大赛
这个比赛,除了最后一题,其他四题其实没啥难度. 第一题:模拟. 第二题:BFS 或者 DP. 第三题:二分. 第四题:BFS. 第五题:思维 + 树的 DFS. 详细题解如下. 1.拿硬币 AC代码( ...
- 2020 力扣杯!Code Your Future 春季全国编程大赛题解
目录 1. 拿硬币 2. 传递信息 3. 剧情触发时间 4. 最小跳跃次数 5. 二叉树任务调度 1. 拿硬币 桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中.我们每次可以选择任意一堆,拿 ...
最新文章
- 2022-2028年中国TFT玻璃行业市场研究及前瞻分析报告
- 起售价近5500,嘲讽了iPhone X的华为Mate 10却没用上人脸识别
- 谷歌研究院最新发现:训练结果不准确,超大数据规模要背锅!
- 浅析企业网站排名低可能是哪些原因导致的呢?
- python java
- XML与DataSet的相互转换
- 别瞎学了,这几门语言要被淘汰了!
- python3版本无法加载reload解决办法NameError: name 'reload' is not defined
- hexo部署成功但是没效果_使用 Hexo+GitHub 搭建个人免费博客教程(小白向)
- Spring Cloud学习总结(1)——Spring Cloud及微服务入门
- Atitit.工作流系统的本质是dsl 图形化的dsl 4gl
- mysql根据身份证得到年龄_MySQL根据身份证获取省份 年龄 性别
- MySql分页查询limit
- 编一程序,将两个字符串连接起来,不要用strcat函数。C语言
- java青蛙跳台阶问题
- qt界面切换时出现的绿色背景修改
- 明明有本事,为什么难升职?
- 虫洞 Wormhole
- pe下bootice修复Linux引导,pe下修复引导不成功?这种方法才是最有效的解决方法...
- SMETA验厂辅导,对于已经通过了审核公司的ETI标准验厂,如何将验厂结果上传到SEDEX上
热门文章
- android光谱图软件,光谱精灵精华版Plus
- SQL SERVER2000安装挂起问题
- 齐齐哈尔市全国计算机等级考试,2019年3月黑龙江省齐齐哈尔市计算机等级考试注意事项...
- java chr()_chr码值对应列表大全
- 攻防世界backup
- MYS-6ULX-IOT 开发板测评——使用MfgTool更新系统
- 手把手教你在自己的扫描器中,集(bai)成(piao)大名鼎鼎的漏扫描工具nuclei
- Lua中的os.time和os.date以及时区计算
- linux类mac桌面,让Linux Mint看起来更像Mac桌面的主题
- 如何在MSDN上获取Win7镜像