【数论】B043_机器人大冒险(取次数)
一、题目描述
力扣团队买了一个可编程机器人,机器人初始位置在原点(0, 0)。小伙伴事先给机器人输入一串指令 command,机器人就会无限循环这条指令的步骤进行移动。指令有两种:
- U: 向 y 轴正方向移动一格
- R: 向 x 轴正方向移动一格。
不幸的是,在 xy 平面上还有一些障碍物,他们的坐标用 obstacles 表示。机器人一旦碰到障碍物就会被损毁。
给定终点坐标 (x, y),返回机器人能否完好地到达终点。如果能,返回 true;否则返回 false。
0<=x<=1e9,0<=y<=1e90 <= x <= 1e^9, 0 <= y <= 1e^90<=x<=1e9,0<=y<=1e9
输入:command = "URR", obstacles = [[2, 2]], x = 3, y = 2
输出:false
解释:机器人在到达终点前会碰到(2, 2)的障碍物。
二、题解
方法一:取次数
算法
- 先统计命令的移动方向的次数到
U
与R
中。 - 先判断机器人是否遇到障碍物,后判断是否能到达终点。
- 因为终点 x 和 y 最大为 10910^9109,所以枚举所有点是不现实的。所以,我们采用取其循环次数,再利用乘法,判断是否可达。
- 循环次数怎么取?
- 毫无疑问是
min(endX/R, endY/U)
,对于障碍物也是同理的。
- 毫无疑问是
* 边界错误:在这句话中:while (k < N && (endX > 0 || endY > 0))
不能把 ||
改为 &&
因为机器人的命令是未知的,一定要等命令执行完。
public boolean robot(String command, int[][] obs, int x, int y) {char[] comm = command.toCharArray();int N = comm.length;int U = 0, R = 0;for (char c : comm) {if (c == 'U') U++;else R++;}for (int[] ob : obs) {if (ob[0] > x || ob[1] > y)continue;int times = Math.min(ob[0]/R, ob[1]/U);int endX = ob[0] - times * R;int endY = ob[1] - times * U;int k = 0;while (k < N && (endX > 0 || endY > 0)) { //注意:这里是 ||,因为要等机器人走完命令才能判断if (comm[k] == 'U') endY--;else endX--;k++;}if (endX == 0 && endY == 0) //如果障碍物可达,返回falsereturn false;}// 类似的算法int times = Math.min(x/R, y/U);int endX = x - times*R;int endY = y - times*U;int k = 0;while (k < N && (endX > 0 || endY > 0)) {if (comm[k] == 'U') endY--;else endX--;k++;}return endX == 0 && endY == 0;
}
复杂度分析
- 时间复杂度:O(N)O(N)O(N),
N
为障碍物的个数。 - 空间复杂度:O(1)O(1)O(1),
【数论】B043_机器人大冒险(取次数)相关推荐
- 2022-02-22:机器人大冒险。 力扣团队买了一个可编程机器人,机器人初始位置在原点(0, 0)。小伙伴事先给机器人输入一串指令command,机器人就会无限循环这条指令的步骤进行移动。指令有两种
2022-02-22:机器人大冒险. 力扣团队买了一个可编程机器人,机器人初始位置在原点(0, 0).小伙伴事先给机器人输入一串指令command,机器人就会无限循环这条指令的步骤进行移动.指令有两种 ...
- 机器人大冒险(二维数组)
题目: 力扣团队买了一个可编程机器人,机器人初始位置在原点(0, 0).小伙伴事先给机器人输入一串指令command,机器人就会无限循环这条指令的步骤进行移动.指令有两种: U: 向y轴正方向移动一格 ...
- bulter机器人_科普!九款使用率最高的物流机器人大盘点!
原标题:科普!九款使用率最高的物流机器人大盘点! 说起快递的速度,中国可谓是跑在全球前列,因为强大的人力资源以及完善的供应链结构,导致整个运作过程很流畅快速.但是,如果在特殊的节点,即使增加成倍的快递 ...
- 曾辉机器人_武昌理工学子在2020年中国机器人大赛中夺冠
"它在过弯的时候非常稳,而且速度快,跑完一圈的时间比第二名少十秒左右."武昌理工学院学生余辉激动地说.11月27日从武昌理工学院获悉,在刚刚结束的2020中国机器人大赛中,武昌理工 ...
- 机器人擂台的利剑_童年回忆!机器人大擂台回来了!还记得当年的利箭吗?
原标题:童年回忆!机器人大擂台回来了!还记得当年的利箭吗? 80后,90后的朋友们,还记得小时候电视上放的一档节目吗?在一个封闭的擂台上,两个机器人肉搏,一方把另一方打报废为止,选手脑洞大开设计各种机 ...
- 拟真机器人拯救者奖励_《冒险岛》新版本上线,拟真机器人大逃亡一触即发!...
经典端游<冒险岛>中的"美人梦工厂"系列一直是玩家们津津乐道的副本之一,除了它有趣的玩法和较难的操作之外,引人入胜的剧情是它成功的关键.5月13日,"美人梦工 ...
- 曾辉机器人_武汉大学生设计研发“机器狗” 在中国机器人大赛中夺冠
武昌理工学院参赛代表队"晨旭队",由该校人工智能学院机器人协会的4名同学组成,分别是软工1803班余辉.计科1805班刘宗文.软工1901班李佳娆.智能1902班嵇然.队伍指导老师 ...
- 领域应用 | 基于知识图谱的警用安保机器人大数据分析技术研究
本文转载自公众号:警察技术杂志. 郝久月 樊志英 汪宁 王欣 摘 要:构建大数据支撑下的智能应用是公安信息化发展的趋势,警用安保机器人大数据分析平台的核心功能包括机器人智能人机交互和 ...
- 机器人擂台的利剑_机器人大擂台2017
机器人大擂台2017下载!机器人大擂台2017视频是首个机器人对战节目!机器人大擂台2017最新一集播出了,提供机器人大擂台2017,欢迎下载机器人大擂台2017! 机器人大擂台 <机器人大擂台 ...
- 江苏机器人竞赛南航_南航金城学院学子在第十届江苏省机器人大赛中获佳绩
摘要: 南航金城学院学子在第十届江苏省机器人大赛中获佳绩为你介绍2020年10月25-27日,由省教育厅.省科学技术协会和江苏省自动化协会联合举办的第十届江苏省大学生机器人大赛在三江... 2020年 ...
最新文章
- 瑞尔森大学的计算机科学专业,瑞尔森大学有哪些专业处于世界顶尖水平?
- C++ CORE DUMP gdb 调试
- Sentinel 连接数据源
- 质量属性效用树例子_数百个 HTML5 例子学习 HT 图形组件 – 拓扑图篇
- 十进制转化为二进制_使用Windows 10内置计算器,将十进制数快速转换为二进制数,试试...
- 第 6 章 存储 - 039 - Data Volume 之 bind mount
- 使用严苛模式打破Android4.0以上平台应用中UI主线程的“独断专行”
- Vs2017添加引用时报错未能正确加载“ReferenceManagerPackage”包。
- php如何去重,php二维数组如何去重?(代码示例)
- VS2010 配置PCL1.6.0AII in one 无法启动程序ALL_BUILD
- JS对大陆车牌照的归属地(省份和城市)加载和显示
- 1970年图灵奖--詹姆斯·威尔金森生平
- vba mysql 80004005_80004005错误,求高手指点,急,谢谢!
- cms php 免费,十大免费PHP内容管理系统(CMS)
- 计算机强制关机后桌面图标不见了,强制关机后桌面上的图标全不见了怎么办
- kali2019安装netspeed教程
- python微信公众号框架_轻松实现python搭建微信公众平台
- Python - Python3 编程第一步 Fibonacci series: 斐波纳契数列
- win10系统自带清除磁盘垃圾工具———磁盘清理工具
- instagram架构_Facebook如何收购Instagram内幕故事
热门文章
- python写整数逆位运算_整数逆位运算
- 计算机科学科普(一):什么是计算机
- aria2自动更新BT Tracker服务器列表脚本
- [算法]从Trie树(字典树)谈到后缀树
- android版本和基带版本号,安卓手机基带是什么意思?基带版本之间有什么区别?...
- WhatsApp Business 与 Google My Business:它们的运作方式和不同之处
- URP——后期处理特效——通道混合器Channel Mixer
- Python——类和对象、魔术方法(day07)
- 需求分析(团队作业3)
- adjacent_find