LeetCode 2069. 模拟行走机器人 II(模拟)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给你一个在 XY 平面上的 width x height 的网格图,左下角 的格子为 (0, 0) ,右上角 的格子为 (width - 1, height - 1)
网格图中相邻格子为四个基本方向之一("North","East","South" 和 "West")。一个机器人 初始 在格子 (0, 0) ,方向为 "East"

机器人可以根据指令移动指定的 步数 。每一步,它可以执行以下操作。

  1. 沿着当前方向尝试 往前一步
  2. 如果机器人下一步将到达的格子 超出了边界 ,机器人会 逆时针 转 90 度,然后再尝试往前一步。

如果机器人完成了指令要求的移动步数,它将停止移动并等待下一个指令。

请你实现 Robot 类:

  • Robot(int width, int height) 初始化一个 width x height 的网格图,机器人初始在 (0, 0) ,方向朝 "East"
  • void move(int num) 给机器人下达前进 num 步的指令。
  • int[] getPos() 返回机器人当前所处的格子位置,用一个长度为 2 的数组 [x, y] 表示。
  • String getDir() 返回当前机器人的朝向,为 “North” ,“East” ,“South” 或者 “West” 。

示例 1:
在这里插入图片描述

输入:
["Robot", "move", "move", "getPos", "getDir", "move", "move", "move", "getPos", "getDir"]
[[6, 3], [2], [2], [], [], [2], [1], [4], [], []]
输出:
[null, null, null, [4, 0], "East", null, null, null, [1, 2], "West"]解释:
Robot robot = new Robot(6, 3); // 初始化网格图,机器人在 (0, 0) ,朝东。
robot.move(2);  // 机器人朝东移动 2 步,到达 (2, 0) ,并朝东。
robot.move(2);  // 机器人朝东移动 2 步,到达 (4, 0) ,并朝东。
robot.getPos(); // 返回 [4, 0]
robot.getDir(); // 返回 "East"
robot.move(2);  // 朝东移动 1 步到达 (5, 0) ,并朝东。// 下一步继续往东移动将出界,所以逆时针转变方向朝北。// 然后,往北移动 1 步到达 (5, 1) ,并朝北。
robot.move(1);  // 朝北移动 1 步到达 (5, 2) ,并朝 北 (不是朝西)。
robot.move(4);  // 下一步继续往北移动将出界,所以逆时针转变方向朝西。// 然后,移动 4 步到 (1, 2) ,并朝西。
robot.getPos(); // 返回 [1, 2]
robot.getDir(); // 返回 "West"提示:
2 <= width, height <= 100
1 <= num <= 10^5
move ,getPos 和 getDir 总共 调用次数不超过 10^4 次。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/walking-robot-simulation-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 只能在最外圈行走,先看能走几个完整的圈,只需要模拟剩余的不能构成整圈的步数
  • 初始方向根据是否在四个顶点确定
class Robot {vector<string> dirname = {"East", "North", "West", "South"};vector<vector<int>> dir = {{1,0},{0,1},{-1,0},{0,-1}};vector<vector<int>> endpoint;int x = 0, y = 0, d = 0; // d 方向编号int xlimit, ylimit;
public:Robot(int width, int height) {xlimit = width;ylimit = height;endpoint.resize(4);endpoint[0] = {width-1, 0};endpoint[1] = {width-1, height-1};endpoint[2] = {0, height-1};endpoint[3] = {0, 0};}void move(int num) {//机器人只能沿着外圈走,一圈是多少步 2w+2h-4int circle = num/(2*xlimit+2*ylimit-4);num = num - (2*xlimit+2*ylimit-4)*circle;// 现在还剩余num步,位置还在 (x, y), 方向看是否在端点上for(int i = 0; i < 4; ++i){if(x==endpoint[i][0] && y==endpoint[i][1]){d = i;break;}}while(num){if(inEnd(x, y))//在端点上,还要走,需要变方向d = (d+1)%4;if(num >= abs(endpoint[d][0]-x)+abs(endpoint[d][1]-y)){ // 够走到尽头num -= abs(endpoint[d][0]-x)+abs(endpoint[d][1]-y);x = endpoint[d][0];y = endpoint[d][1];}else // 不够走到头{x += dir[d][0]*num;y += dir[d][1]*num;num = 0;}}}vector<int> getPos() {return {x, y};}string getDir() {return dirname[d];}bool inEnd(int a, int b){return (a==0&&b==0) || (a==0&&b==ylimit-1) || (a==xlimit-1&&b==0) || (a==xlimit-1&&b==ylimit-1);}
};

200 ms 117.7 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471520.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

eclipse php xdebug,Eclipse for php + Xdebug搭建PHP的调试环境

Eclipse for php Xdebug搭建PHP的调试环境Eclipse for php Xdebug搭建PHP的调试环境第二步&#xff1a;下载Xdebug (下载地址位于&#xff1a; http://xdebug.org/download.php&#xff0c;我的PHP版本为 PHP 5.3.28 Thread Safety&#xff0c; Apach为2.2.25&#xff0c;使用…

ROS2.9.27架设网吧软路由实战篇之端口映射与回流

转载&#xff1a;http://blog.csdn.net/zm2714/article/details/7924280 上一篇&#xff1a;ROS2.9.27架设网吧软路由实战篇之连通网络&#xff0c;主要讲述了网吧架设软路由ROS2.9.27的基本配置&#xff0c;目的就是使网吧能顺利连接外网。没有涉及到更丰富的其它功能和网络安…

LeetCode 2070. 每一个查询的最大美丽值(离线查询+排序+优先队列)

文章目录1. 题目2. 解题1. 题目 给你一个二维整数数组 items &#xff0c;其中 items[i] [pricei, beautyi] 分别表示每一个物品的 价格 和 美丽值 。 同时给你一个下标从 0 开始的整数数组 queries 。对于每个查询 queries[j] &#xff0c;你想求出价格小于等于 queries[j]…

php接收二进制流,php接收二进制流【转】

标签&#xff1a;binary 文件 com post 进制 二进制 tip form 生成文件/** 二进制流生成文件* $_POST 无法解释二进制流&#xff0c;需要用到 $GLOBALS[‘HTTP_RAW_POST_DATA‘] 或 php://input* $GLOBALS[‘HTTP_RAW_POST_DATA‘] 和 php://input 都不能用于 …

提交app时候90475,90474

提交app是遇到如下错误&#xff1a; ERROR ITMS-90475: "Invalid Bundle. iPad Multitasking support requires launch story board in bundle xxxx." ERROR ITMS-90474: "Invalid Bundle. iPad Multitasking support requires these orientations: UIInterfac…

LeetCode 2071. 你可以安排的最多任务数目(二分查找)

文章目录1. 题目2. 解题1. 题目 给你 n 个任务和 m 个工人。每个任务需要一定的力量值才能完成&#xff0c;需要的力量值保存在下标从 0 开始的整数数组 tasks 中&#xff0c;第 i 个任务需要 tasks[i] 的力量才能完成。 每个工人的力量值保存在下标从 0 开始的整数数组 worke…

crontab 执行php脚本,为什么crontab没有执行我的PHP脚本?

我已经构建了一个php文件来检查一些结果,所以我需要设置一个cronjob.我设置一个每30分钟运行一次,以便结果发送.但是,我不知道为什么我的crontab每隔30分钟就没有运行.以下是我设置crontab的方法&#xff1a;*/30 * * * * php /var/www/html/result.php我已经确认我的文件目录是…

用JS来create结点,纯JS代码生成html页面(作业练习)

<script>window.onload function(){document.title 表单示例;var body document.body;// body append child beginvar center document.createElement(center); body.appendChild(center);var h1 document.createElement(h1);h1.innerHTML 增加用户;center.appendC…

LeetCode 2073. 买票需要的时间

文章目录1. 题目2. 解题1. 题目 有 n 个人前来排队买票&#xff0c;其中第 0 人站在队伍 最前方 &#xff0c;第 (n - 1) 人站在队伍 最后方 。 给你一个下标从 0 开始的整数数组 tickets &#xff0c;数组长度为 n &#xff0c;其中第 i 人想要购买的票数为 tickets[i] 。 …

docker php nginx,使用docker快速搭建nginx+php环境

经过了繁琐的docker环境安装&#xff0c;看了下镜像/容器的简单使用&#xff0c;开始进行nginxphp环境的搭建&#xff0c;本文记录一下在安装过程中的笔记。

使用bootstrap-table插件

1.用户提交信息过滤表格内容&#xff1a; a.设置表格查询参数&#xff0c;并在用户提交按钮时候更新表格 <form id"current_table" class"form-inline" role"form" onSubmit"return table_filter(this);">... </form> …

LeetCode 2074. 反转偶数长度组的节点(链表)

文章目录1. 题目2. 解题1. 题目 给你一个链表的头节点 head 。 链表中的节点 按顺序 划分成若干 非空 组&#xff0c;这些非空组的长度构成一个自然数序列&#xff08;1, 2, 3, 4, …&#xff09;。一个组的 长度 就是组中分配到的节点数目。换句话说&#xff1a; 节点 1 分…

php判断全是中文正则,php判断是否为中文正则表达式大全

php判断是否为中文正则表达式大全$str"aaa";if(!eregi("[^\x80-\xff]","$str")){echo "是";}else{echo "不是";}?>$str "中国";echo $str;echo "";//if (preg_match("/^[".chr(0xa1).&q…

[转]Hadoop集群_WordCount运行详解--MapReduce编程模型

Hadoop集群_WordCount运行详解--MapReduce编程模型 下面这篇文章写得非常好&#xff0c;有利于初学mapreduce的入门 http://www.nosqldb.cn/1369099810935.html 转载于:https://www.cnblogs.com/wxquare/p/4889613.html

LeetCode 2075. 解码斜向换位密码(模拟)

文章目录1. 题目2. 解题1. 题目 字符串 originalText 使用 斜向换位密码 &#xff0c;经由 行数固定 为 rows 的矩阵辅助&#xff0c;加密得到一个字符串 encodedText 。 originalText 先按从左上到右下的方式放置到矩阵中。 先填充蓝色单元格&#xff0c;接着是红色单元格…

php 无法加载css文件,解决ThinkPHP样式无法加载问题(CSS,JS),

解决ThinkPHP样式无法加载问题(CSS,JS)解决了ThinkPHP风格无法加载的问题(CSS&#xff0c;JS)&#xff0c;以下是thinkphp框架教程栏目&#xff0c;对ThinkPHP风格无法加载(CSS&#xff0c;JS)问题的解决方案&#xff0c;希望对有需要的人有所帮助&#xff01;1.项目入口文件in…

UI设计培训中所需要的手绘能力

一、漫画 主要不是绘画能力&#xff0c;更重分镜头&#xff0c;叙事能力&#xff0c;脚本编写能力&#xff0c;很多画的不好&#xff0c;但依然存活很多年的漫画还真不少&#xff0c;甚至可以证明&#xff0c;绘画能力的底线可以很低。 二、游戏原画 虽然工作内容是画画&#x…

LeetCode 2076. 处理含限制条件的好友请求(并查集)

文章目录1. 题目2. 解题1. 题目 给你一个整数 n &#xff0c;表示网络上的用户数目。每个用户按从 0 到 n - 1 进行编号。 给你一个下标从 0 开始的二维整数数组 restrictions &#xff0c;其中 restrictions[i] [xi, yi] 意味着用户 xi 和用户 yi 不能 成为 朋友 &#xff…

java检查两个字符串是否包含,java判断一个字符串是否包含另外一个字符串,java另外一个,要检查一个字符串是否包含...

java判断一个字符串是否包含另外一个字符串&#xff0c;java另外一个,要检查一个字符串是否包含要检查一个字符串是否包含另外一个字符串需要使用indexOf()方法&#xff0c;如果indexOf方法返回大于等于0的值&#xff0c;则表示包含&#xff0c;若返回-1则表示字符串中不包含。…

设置停靠模式,切割设置星级图标

//星级 [self.startView setStarLevelFormStr:model.starCurrent]; - (void)createUI{ //在当前图片上放置五星级图片 UIImageView * upImageView [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 65, 23)]; upImageView.tag 2000; upImageView.image [UIImage imageN…