# LeetCode 1041. Robot Bounded In Circle

On an infinite plane, a robot initially stands at (0, 0) and faces north. Note that:

• The north direction is the positive direction of the y-axis.
• The south direction is the negative direction of the y-axis.
• The east direction is the positive direction of the x-axis.
• The west direction is the negative direction of the x-axis.

The robot can receive one of three instructions:

• "G": go straight 1 unit.
• "L": turn 90 degrees to the left (i.e., anti-clockwise direction).
• "R": turn 90 degrees to the right (i.e., clockwise direction).

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: instructions = "GGLLGG"
Output: true
Explanation: The robot is initially at (0, 0) facing the north direction.
"G": move one step. Position: (0, 1). Direction: North.
"G": move one step. Position: (0, 2). Direction: North.
"L": turn 90 degrees anti-clockwise. Position: (0, 2). Direction: West.
"L": turn 90 degrees anti-clockwise. Position: (0, 2). Direction: South.
"G": move one step. Position: (0, 1). Direction: South.
"G": move one step. Position: (0, 0). Direction: South.
Repeating the instructions, the robot goes into the cycle: (0, 0) --> (0, 1) --> (0, 2) --> (0, 1) --> (0, 0).
Based on that, we return true.


Example 2:

Input: instructions = "GG"
Output: false
Explanation: The robot is initially at (0, 0) facing the north direction.
"G": move one step. Position: (0, 1). Direction: North.
"G": move one step. Position: (0, 2). Direction: North.
Repeating the instructions, keeps advancing in the north direction and does not go into cycles.
Based on that, we return false.


Example 3:

Input: instructions = "GL"
Output: true
Explanation: The robot is initially at (0, 0) facing the north direction.
"G": move one step. Position: (0, 1). Direction: North.
"L": turn 90 degrees anti-clockwise. Position: (0, 1). Direction: West.
"G": move one step. Position: (-1, 1). Direction: West.
"L": turn 90 degrees anti-clockwise. Position: (-1, 1). Direction: South.
"G": move one step. Position: (-1, 0). Direction: South.
"L": turn 90 degrees anti-clockwise. Position: (-1, 0). Direction: East.
"G": move one step. Position: (0, 0). Direction: East.
"L": turn 90 degrees anti-clockwise. Position: (0, 0). Direction: North.
Repeating the instructions, the robot goes into the cycle: (0, 0) --> (0, 1) --> (-1, 1) --> (-1, 0) --> (0, 0).
Based on that, we return true.

Constraints:

• 1 <= instructions.length <= 100
• instructions[i] is 'G''L' or, 'R'.

If there is a circle, it must be one of the two conditions.

1. The robot comes back to origin, and no matter which directions it is facing. Apparently there is a circle.

2. The robot final diretion is not north, then after another 1 or 3 repeated moves, there is a circle.

Time Complexity: O(n). n = instructions.length().

Space: O(1).

AC Java:

 1 class Solution {
2     public boolean isRobotBounded(String instructions) {
3         int[][] dirs = new int[][]{{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
4         int x = 0;
5         int y = 0;
6         int ind = 0;
7         for(int i = 0; i < instructions.length(); i++){
8             char c = instructions.charAt(i);
9             if(c == 'R'){
10                 ind = (ind + 1) % 4;
11             }else if(c == 'L'){
12                 ind = (ind + 3) % 4;
13             }else{
14                 x += dirs[ind][0];
15                 y += dirs[ind][1];
16             }
17         }
18
19         return (x == 0 && y == 0) || ind != 0;
20     }
21 }

posted @ 2024-08-03 12:33  Dylan_Java_NYC  阅读(3)  评论(0编辑  收藏  举报