机器人界C ++

假设我们有一个无限的平面,一个机器人最初位于位置(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