机器人循环受限 C++
假设我们有一个无限平面,一个机器人最初位于(0, 0)位置,面向北方。机器人可以接收三种指令之一:
G - 直行1个单位;
L - 向左转90度;
R - 向右转90度。
机器人按顺序执行给定的指令,指令无限重复。我们必须检查是否存在一个平面圆,使得机器人永远不会离开该圆。例如,如果输入是[GGLLGG],则答案为真。从(0,0)到(0,2),它将永远循环,所以这是一个闭合路径,答案为真。
为了解决这个问题,我们将遵循以下步骤:
创建一个数组 dir := [[0,1], [1,0], [0,-1], [-1,0]]
创建一个坐标对temp,初始值为(0, 0),并设k := 0
对于i从0到s的大小
如果s[i]是G,则
temp := (dir[k][0], dir[k][1])
否则,如果s[i]是L,则k := (k + 1) mod 4,否则k := (k - 1) mod 4
如果temp不为(0, 0)且k > 0则为假,否则为真
示例
让我们看看下面的实现来更好地理解:
#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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP