自学内容网 自学内容网

【力扣 1041】困于环中的机器人 C++题解(数学+字符串+模拟)

在无限的平面上,机器人最初位于 (0, 0) 处,面朝北方。注意:

北方向 是y轴的正方向。
南方向 是y轴的负方向。
东方向 是x轴的正方向。
西方向 是x轴的负方向。
机器人可以接受下列三条指令之一:

“G”:直走 1 个单位
“L”:左转 90 度
“R”:右转 90 度
机器人按顺序执行指令 instructions,并一直重复它们。

只有在平面中存在环使得机器人永远无法离开时,返回 true。否则,返回 false。

示例 1:

输入:instructions = “GGLLGG”
输出:true
解释:机器人最初在(0,0)处,面向北方。
“G”:移动一步。位置:(0,1)方向:北。
“G”:移动一步。位置:(0,2).方向:北。
“L”:逆时针旋转90度。位置:(0,2).方向:西。
“L”:逆时针旋转90度。位置:(0,2)方向:南。
“G”:移动一步。位置:(0,1)方向:南。
“G”:移动一步。位置:(0,0)方向:南。
重复指令,机器人进入循环:(0,0)——>(0,1)——>(0,2)——>(0,1)——>(0,0)。
在此基础上,我们返回true。
示例 2:

输入:instructions = “GG”
输出:false
解释:机器人最初在(0,0)处,面向北方。
“G”:移动一步。位置:(0,1)方向:北。
“G”:移动一步。位置:(0,2).方向:北。
重复这些指示,继续朝北前进,不会进入循环。
在此基础上,返回false。
示例 3:

输入:instructions = “GL”
输出:true
解释:机器人最初在(0,0)处,面向北方。
“G”:移动一步。位置:(0,1)方向:北。
“L”:逆时针旋转90度。位置:(0,1).方向:西。
“G”:移动一步。位置:(- 1,1)方向:西。
“L”:逆时针旋转90度。位置:(- 1,1)方向:南。
“G”:移动一步。位置:(- 1,0)方向:南。
“L”:逆时针旋转90度。位置:(- 1,0)方向:东方。
“G”:移动一步。位置:(0,0)方向:东方。
“L”:逆时针旋转90度。位置:(0,0)方向:北。
重复指令,机器人进入循环:(0,0)——>(0,1)——>(- 1,1)——>(- 1,0)——>(0,0)。
在此基础上,我们返回true。

提示:

1 <= instructions.length <= 100
instructions[i] 仅包含 ‘G’, ‘L’, ‘R’


思路

首先,代码定义两个变量x和y来表示机器人的当前位置,以及一个变量dir来表示机器人的当前方向。dir的值为0,1,2,3分别代表北、东、南、西四个方向。

然后,代码会遍历输入的指令,对于每一条指令,根据指令的类型进行相应的操作。如果是’G’,则根据当前的方向更新机器人的位置;如果是’L’,则将dir减1(模4),即向左转;如果是’R’,则将dir加1(模4),即向右转。

遍历完所有的指令后,会判断机器人的状态。如果机器人回到了原点(x和y都为0),或者机器人的方向不是初始的北方(dir不为0),则返回true,表示机器人会无限循环。否则,返回false,表示机器人不会无限循环。

这个算法的关键在于,只有当机器人回到原点,或者每一轮指令后方向改变,它才会在长期下来形成一个循环的路径。这是因为如果机器人的方向没有改变,那么它会一直沿直线前进,不会形成循环。


AC代码

/*
 * @lc app=leetcode.cn id=1041 lang=cpp
 *
 * [1041] 困于环中的机器人
 */

// @lc code=start
class Solution {
   public:
bool isRobotBounded(string instructions) {
int x, y;
int dir = 0;
x = y = 0;
for (const char c : instructions) {
switch (c) {
case 'G':
switch (dir) {
case 0:
y++;
break;
case 1:
x++;
break;
case 2:
y--;
break;
case 3:
x--;
break;
}
break;
case 'L':
dir = (dir + 3) % 4;
break;
case 'R':
dir = (dir + 1) % 4;
break;
}
}
if (!(x || y) || dir) {
return true;
}
return false;
}
};
// @lc code=end


原文地址:https://blog.csdn.net/qq_34988204/article/details/135760522

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!