谁能低价做网站支付接口,重庆电商网站建设,做网站需要买ip地址吗,汕头网上推广找谁文章目录1. 题目2. 解题1. 题目
给你一个在 XY 平面上的 width x height 的网格图#xff0c;左下角 的格子为 (0, 0) #xff0c;右上角 的格子为 (width - 1, height - 1) 。 网格图中相邻格子为四个基本方向之一#xff08;North#xff0c;East左下角 的格子为 (0, 0) 右上角 的格子为 (width - 1, height - 1) 。 网格图中相邻格子为四个基本方向之一NorthEastSouth 和 West。一个机器人 初始 在格子 (0, 0) 方向为 East 。
机器人可以根据指令移动指定的 步数 。每一步它可以执行以下操作。
沿着当前方向尝试 往前一步 。如果机器人下一步将到达的格子 超出了边界 机器人会 逆时针 转 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 {vectorstring dirname {East, North, West, South};vectorvectorint dir {{1,0},{0,1},{-1,0},{0,-1}};vectorvectorint 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) {//机器人只能沿着外圈走一圈是多少步 2w2h-4int circle num/(2*xlimit2*ylimit-4);num num - (2*xlimit2*ylimit-4)*circle;// 现在还剩余num步,位置还在 (x, y), 方向看是否在端点上for(int i 0; i 4; i){if(xendpoint[i][0] yendpoint[i][1]){d i;break;}}while(num){if(inEnd(x, y))//在端点上还要走需要变方向d (d1)%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;}}}vectorint getPos() {return {x, y};}string getDir() {return dirname[d];}bool inEnd(int a, int b){return (a0b0) || (a0bylimit-1) || (axlimit-1b0) || (axlimit-1bylimit-1);}
};200 ms 117.7 MB C 我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号Michael阿明一起加油、一起学习进步