1041. Robot Bounded In Circle

#### QUESTION：

On an infinite plane, a robot initially stands at (0, 0) and faces north. The robot can receive one of three instructions:

“G”: go straight 1 unit; “L”: turn 90 degrees to the left; “R”: turn 90 degress to the right. The robot performs the instructions given in order, and repeats them forever.

Return true if and only if there exists a circle in the plane such that the robot never leaves the circle.

Example 1:

Input: “GGLLGG” Output: true Explanation: The robot moves from (0,0) to (0,2), turns 180 degrees, and then returns to (0,0). When repeating these instructions, the robot remains in the circle of radius 2 centered at the origin. Example 2:

Input: “GG” Output: false Explanation: The robot moves north indefinitely. Example 3:

Input: “GL” Output: true Explanation: The robot moves from (0, 0) -> (0, 1) -> (-1, 1) -> (-1, 0) -> (0, 0) -> …

Note:

1 <= instructions.length <= 100 instructions[i] is in {‘G’, ‘L’, ‘R’}

#### SOLUTION：

``````class Solution {
public boolean isRobotBounded(String instructions) {
char[] chars = instructions.toCharArray();
int[] right = new int[]{1,0};
int[] left = new int[]{-1,0};
int[] up = new int[]{0,1};
int[] down = new int[]{0,-1};
int[][] direction = new int[4][2];
direction[0] = up;
direction[1] = right;
direction[2] = down;
direction[3] = left;
int index = 0;
int[] start = new int[]{0,0};
for(int i = 0;i<chars.length;i++){
if('G'==chars[i]) {
start[0]+=direction[index][0];
start[1]+=direction[index][1];
}else if ('L'==chars[i]){
if(index==0) index=3;
else index--;
}else if ('R'==chars[i]){
if(index==3)index=0;
else index++;
}
}
return start[0] == 0 && start[1] == 0 || index > 0;
}
}
``````
>