假设我们有一个无限的平面,一个机器人最初位于位置(0,0)并朝北。机器人可以接收以下三个指令之一-
G-直线前进1单位;
L-向左旋转90度;
R-向右旋转90度。
机器人按顺序执行指令,指令会永远重复。我们必须检查平面中是否存在圆,以使机器人永远不会离开圆。因此,如果输入类似于[GGLLGG],则答案将是正确的。从(0,0)到(0,2),它将永远循环,所以这是一条封闭的路径,答案是正确的。
为了解决这个问题,我们将遵循以下步骤-
制作一个数组目录:= [[[0,1],[1,0],[0,-1],[-1,0]]
配对温度,最初是(0,0)和k:= 0
对于范围从0到s的i
temp:=(dir [k,0],dir [k,1])
如果s [i]是G,则
否则,当s [i]为L时,则k:=(k +1)mod 4,否则k:=(k-1)mod 4
如果temp不是(0,0)并且k> 0时为false,否则为true
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; class Solution { public: bool isRobotBounded(string s) { pair <int, int> temp({0,0}); int k = 0; for(int i = 0; i < s.size(); i++){ if(s[i] == 'G'){ temp.first += dir[k][0]; temp.second += dir[k][1]; }else if(s[i] == 'L'){ k = (k + 1) % 4; }else{ k = ((k - 1) + 4) % 4; } } return temp.first == 0 && temp.second == 0 || k > 0; } }; main(){ Solution ob; cout << (ob.isRobotBounded("GGLLGG")); }
"GGLLGG"
输出结果
1