1041. Robot Bounded In Circle

Difficulty:
Related Topics:
Similar Questions:

    Problem

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

    The robot can receive one of three instructions:

    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:

    Solution (Java)

    class Solution {
        public boolean isRobotBounded(String instructions) {
            int[][] dir = {{0, 1}, {-1, 0}, {0, -1}, {1, 0}};
            int i = 0;
            int x = 0;
            int y = 0;
    
            for (int s = 0; s < instructions.length(); s++) {
                if (instructions.charAt(s) == 'L') {
                    i = (i + 1) % 4;
                } else if (instructions.charAt(s) == 'R') {
                    i = (i + 3) % 4;
                } else {
                    x = x + dir[i][0];
                    y = y + dir[i][1];
                }
            }
            return x == 0 && y == 0 || i != 0;
        }
    }
    

    Explain:

    nope.

    Complexity: