力扣团队买了一个可编程机器人,机器人初始位置在原点(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]不为原点或者终点

思路:模拟(超时)

class Solution {public boolean robot(String command, int[][] obstacles, int x, int y) {int len = command.length();int a = 0, b = 0;int index = 0;while (len != 0){if(index == len){index = 0;}char str = command.charAt(index++);if(str == 'U'){b ++;}else if(str == 'R'){a ++;}if(a == x && b == y){return true;}else if(a > x || b > y){return false;}for (int i = 0; i < obstacles.length; i++) {if(obstacles[i][0] == a && obstacles[i][1] == b){return false;}}}return false;}
}

优化

class Solution {public boolean robot(String command, int[][] obstacles, int x, int y) {int len = command.length();int a = 0, b = 0;// 先判断走一轮先能不能走完。for (int i = 0; i < len; i++) {char str = command.charAt(i);if(str == 'U'){b ++;}else{a ++;}}boolean res = reach(command, x, y, a, b);if (!res){return false;}for (int[] val: obstacles) {if(val[0] > x || val[1] > y){continue;}if(reach(command, val[0], val[1], a, b)){return false;}}return true;}public boolean reach(String command,int tx, int ty, int x, int y){// 看至少还需要多少遍才能到达终点。int min = Math.min(tx/x, ty/y);int nx = x*min, ny = y*min;if(nx == tx && ny == ty){return true;}for (int i = 0; i < command.length(); i++) {char str = command.charAt(i);if(str == 'U'){ny ++;}else{nx ++;}if (nx > tx || ny > ty) return false;if (nx == tx && ny == ty) return true;}return true;}
}

LeetCode刷题日记:LCP 03.机器人大冒险相关推荐

  1. 一个算法笨蛋的12月leetCode刷题日记

    类似文章 一个算法笨蛋的2021年11月leetCode刷题日记 一个算法笨蛋的2021年12月leetCode刷题日记 一个算法笨蛋的2022年1月leetCode刷题日记 一个算法笨蛋的2022年 ...

  2. Leetcode刷题日记(十二)

    又是老台词:欢迎大家来到一晚一度的leetcode刷题日记时间.今天我们来讲讲队列的问题,队列这方面的基础知识需要的同学到博主前面的文章找吧.队列这方面的问题平时博主也是接触得比较少的.下面是一道利用 ...

  3. Leetcode刷题日记:21-25题篇

    Leetcode刷题日记:21-25题篇 简介 题目: 21. 合并两个有序链表 22. 括号生成 23. 合并K个升序链表 24. 两两交换链表中的节点 25. K 个一组翻转链表 注 简介 这个系 ...

  4. 【LeetCode刷题日记】常用算法基础和理解及运用

    在我们LeetCode刷题过程中,如果我们只是了解数据结构(数组,链表,数)的使用方法,那我们在面对复杂的题目时,是很难很好的解决问题的,因此我们要了解一些常用算法来帮助我们更好的解题. 递归和迭代 ...

  5. leetcode刷题日记(一)—— 数组

    因为暑期实习找得很不顺利,感觉自身最大的问题体现在刷题量偏少,操作系统,数据库基础不好,所以现在决定写博客来记录整个过程,希望能找到大厂offer,如果不能找到的话也算是为秋招做准备. 剑指offer ...

  6. [东哥的leetcode刷题日记] leetcode 278 :First Bad Version

    leetcode 278 :First Bad Version 题目链接: https://leetcode-cn.com/problems/search-insert-position/ 难度: 简 ...

  7. LeetCode刷题日记盛最多水的容器

    节后第一天,鉴于五一五天都没做过题,有点遗忘了,今天来看一道简单点的题,练下手. 先看下题: 给你 n 个非负整数 a1,a2,-,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条 ...

  8. 石器时代 —— Leetcode刷题日记 (一 百大热题)

    Date: 2019.10.22 - (C++ Version) 文章目录 All Labels: `热题100` L1 两数之和 L2 两数相加 暴力相加 递归 迭代 L3 无重复字符的最长子串 L ...

  9. [东哥的leetcode刷题日记] leetcode 283 : Move Zeroes

    leetcode 283 : Move Zeroes 题目链接: https://leetcode-cn.com/problems/move-zeroes/ 难度: 简单 归类 : 数组操作 题目: ...

  10. LeetCode刷题日记精选例题(解析+代码+链接)

    文章目录 一.用栈模拟队列 二.用队列模拟栈 三.有效的括号 解法一 解法二 四.删除字符串中所有相邻重复项 五.逆波兰表达式求值 六.滑动窗口最大值 七.前k个高频元素 一.用栈模拟队列 因为队列先 ...

最新文章

  1. vsftp 安装日志
  2. 阿里云 刷新缓存 java_【从入门到放弃-Java】并发编程-NIO-Buffer
  3. Fabric架构演变之路 1
  4. 加速度和陀螺仪 日常活动识别 跌倒检测_巢湖房屋安全检测,幼儿园房屋质量检测新趋势-房屋鉴定专业团队...
  5. lightoj 1214
  6. HashSet、LinkedHashSet、TreeSet 简明解释
  7. 员工收“老板”QQ消息转账98万 警方挽回被骗资金
  8. VNC viewer双击鼠标出发ctrl+c
  9. 爱思助手更新后无法连接服务器,爱思助手出现无法连接或连接超时的操作教程...
  10. zblog模板php免费三栏,天兴工作室三栏布局zblog模板 自定义配色
  11. 智能名片为什么使用场景都是微信小程序?哪些新玩法值得一试?
  12. kubectl 命令详解(三十五):rollout undo
  13. extjs 数字校园-云资源平台 2014.2.4-班级座位表
  14. excel统计每个单元格内的单词及空格的个数
  15. 博客园客户端UAP开发随笔 -- 搭建App之间的桥梁
  16. Unity2D 官方骨骼动画Anima2D使用方法
  17. BIRTV 2018媒体融合峰会:TVU CEO演讲干货分享
  18. MCU模拟JTAG接口对LATTICE CPLD FPGA 进行在线编程加载
  19. 水叮当的舞步(IDA*)(2019-中山集训)[NOIP2013模拟]
  20. 【测绘程序设计】——大地主题解算

热门文章

  1. 教你如何刻录极品CD音乐碟
  2. 希腊字母在Vim 中的输入方法
  3. 集线器、交换机和路由器
  4. [XJTU计算机网络安全与管理]——第八讲密钥管理和分发
  5. 宝塔面板ftp空间连接失败解决方案汇总
  6. debian linux 关闭防火墙,Debian怎么关闭系统自带防火墙命令!
  7. 搜狗输入法双拼 linux,Ubuntu搜狗输入法设置双拼
  8. 建立FTP服务器的免费软件
  9. 免费SSL证书申请和部署
  10. vue 下载Excel 文件