思路:
设执行完一次顺序执行指令 instructions,机器人的位置为(x,y),方向为gps(1表示面朝北,2表示面朝西,3表示面朝南,4表示面朝东)
若(x,y)=(0,0),则不论面朝那里,机器人都困于环中。因为从机器人的视角看,相当于他没有移动位置;第二次执行指令他仍然不移动位置;因此不论gps变不变,他都困于环中。
若(x,y)!=(0,0),gps=1,则机器人不会困于环中。由于机器人仍然面朝北,因此他执行第二次指令后,相当于再进行相同的位移,此时位置为(2x,2y),gps=1;
若(x,y)!=(0,0),gps!=1,则机器人困于环中。假如说(x1,y1)=(-1,1),gps1=2,则第二次移动后(x2,y2)=(-2,0),gps2=3,第三次移动后(x3,y3)=(-1,-1),gps3=4,第四次移动后(x4,y4)=(0,0),gps4=1;移动轨迹是一个正方形,机器人一定会困于环中。 还有一种情况是,(x1,y1)=(-1,1),gps1=3,则第二次移动后(x2,y2)=(0,0),gps2=1,移动轨迹是一个来回,机器人困于环中。 (x,y)换成其他值也是一样的结果。 gps与x轴正向正交,则移动轨迹是一个正方形,回到原点;gps与x轴正向相反,则移动轨迹是一个来回,机器人困于环中。
class Solution {
public:
bool isRobotBounded(string instructions) {
int x=0,y=0; //表示位置
int gps=1; //表示方向
for(int i=0;i<instructions.length();i++){
if(instructions[i]=='G'){
if(gps==1){
x++;
}else if(gps==3){
x--;
}else if(gps==4){
y++;
}else{
y--;
}
}else if(instructions[i]=='L'){
gps=(gps+1)%4;
if(gps==0){
gps=4;
}
}else{
gps--;
if(gps==0){
gps=4;
}
}
}
if((x==0&&y==0)||(gps!=1)){
return true;
}else{
return false;
}
}
};