2023-04-11每日一题
一、题目编号
1041. 困于环中的机器人
二、题目链接
https://leetcode.cn/problems/robot-bounded-in-circle/
三、题目描述
在无限的平面上,机器人最初位于 (0, 0) 处,面朝北方。注意:
北方向 是y轴的正方向。
南方向 是y轴的负方向。
东方向 是x轴的正方向。
西方向 是x轴的负方向。
机器人可以接受下列三条指令之一:
“G”:直走 1 个单位
“L”:左转 90 度
“R”:右转 90 度
机器人按顺序执行指令 instructions,并一直重复它们。
只有在平面中存在环使得机器人永远无法离开时,返回 true。否则,返回 false。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/robot-bounded-in-circle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
四、解题代码
class Solution {
int dir[4][2] = {
{0, 1},
{1, 0},
{0, -1},
{-1, 0},
};
public:
bool isRobotBounded(string instructions) {
int hash[100010];
memset(hash, 0, sizeof(hash));
int x = 0;
int y = 0;
int i = 0;
int flag = 0;
int n = instructions.size();
for(int i = 0; i < n; ++i){
if(instructions[i] == 'G'){
x += dir[flag][0];
y += dir[flag][1];
} else if(instructions[i] == 'L'){
flag = (flag + 3) % 4;
} else{
flag = (flag + 1) % 4;
}
}
if(x == 0 && y == 0){
return true;
}
if(flag != 0){
return true;
}
return false;
}
};
五、解题思路
(1)模拟题,首先要知晓如何通过数组进行平面内四方向遍历。然后用一个int型变量flag来控制方向,二维数组中0~3存储的依次时向北,向东,向南,向西,那么(flag+1%4 则是向右转,(flag+3)%4则是 向左转。
(2)一段指令结束后开始判断,如果在原点的话,那么无论方向如何,运行轨迹都不变,那么一定会无限次回到原点。如果不在原点,假设与一开始朝向相同,即向北(flag = 0),那么会一直产生偏移量,然后回不去原点了。那么开始思考其他的情况。如果每一次变换都是向右转向,那么转四次才会回到北面。那么假设向右转四次,向左一样。第一次移动后,坐标为(x ,y),第二次后为(x+y, y - x),第三次后为(y,-x),第四次为(0, 0),这样又进入循环了。