機器人迴圈受限 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