Overflow in intermediate arithmetic
Wrong move: Temporary multiplications exceed integer bounds.
Usually fails on: Large inputs wrap around unexpectedly.
Fix: Use wider types, modular arithmetic, or rearranged operations.
Move from brute-force thinking to an efficient approach using math strategy.
On an infinite plane, a robot initially stands at (0, 0) and faces north. Note that:
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 <= 100instructions[i] is 'G', 'L' or, 'R'.Problem summary: 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.
Start with the most direct exhaustive search. That gives a correctness anchor before optimizing.
Pattern signal: Math
"GGLLGG"
"GG"
"GL"
Source-backed implementations are provided below for direct study and interview prep.
// Accepted solution for LeetCode #1041: Robot Bounded In Circle
class Solution {
public boolean isRobotBounded(String instructions) {
int k = 0;
int[] dist = new int[4];
for (int i = 0; i < instructions.length(); ++i) {
char c = instructions.charAt(i);
if (c == 'L') {
k = (k + 1) % 4;
} else if (c == 'R') {
k = (k + 3) % 4;
} else {
++dist[k];
}
}
return (dist[0] == dist[2] && dist[1] == dist[3]) || (k != 0);
}
}
// Accepted solution for LeetCode #1041: Robot Bounded In Circle
func isRobotBounded(instructions string) bool {
dist := [4]int{}
k := 0
for _, c := range instructions {
if c == 'L' {
k = (k + 1) % 4
} else if c == 'R' {
k = (k + 3) % 4
} else {
dist[k]++
}
}
return (dist[0] == dist[2] && dist[1] == dist[3]) || k != 0
}
# Accepted solution for LeetCode #1041: Robot Bounded In Circle
class Solution:
def isRobotBounded(self, instructions: str) -> bool:
k = 0
dist = [0] * 4
for c in instructions:
if c == 'L':
k = (k + 1) % 4
elif c == 'R':
k = (k + 3) % 4
else:
dist[k] += 1
return (dist[0] == dist[2] and dist[1] == dist[3]) or k != 0
// Accepted solution for LeetCode #1041: Robot Bounded In Circle
struct Solution;
impl Solution {
fn is_robot_bounded(instructions: String) -> bool {
let mut x = 0;
let mut y = 0;
let mut i = 0;
let d = [[1, 0], [0, 1], [-1, 0], [0, -1]];
for c in instructions.chars() {
match c {
'G' => {
x += d[i][0];
y += d[i][1];
}
'L' => {
i = (i + 1) % 3;
}
'R' => {
i = (i + 3) % 3;
}
_ => (),
}
}
x == 0 && y == 0 || i != 0
}
}
#[test]
fn test() {
assert_eq!(Solution::is_robot_bounded("GGLLGG".to_string()), true);
assert_eq!(Solution::is_robot_bounded("GG".to_string()), false);
assert_eq!(Solution::is_robot_bounded("GL".to_string()), true);
}
// Accepted solution for LeetCode #1041: Robot Bounded In Circle
function isRobotBounded(instructions: string): boolean {
const dist: number[] = new Array(4).fill(0);
let k = 0;
for (const c of instructions) {
if (c === 'L') {
k = (k + 1) % 4;
} else if (c === 'R') {
k = (k + 3) % 4;
} else {
++dist[k];
}
}
return (dist[0] === dist[2] && dist[1] === dist[3]) || k !== 0;
}
Use this to step through a reusable interview workflow for this problem.
Simulate the process step by step — multiply n times, check each number up to n, or iterate through all possibilities. Each step is O(1), but doing it n times gives O(n). No extra space needed since we just track running state.
Math problems often have a closed-form or O(log n) solution hidden behind an O(n) simulation. Modular arithmetic, fast exponentiation (repeated squaring), GCD (Euclidean algorithm), and number theory properties can dramatically reduce complexity.
Review these before coding to avoid predictable interview regressions.
Wrong move: Temporary multiplications exceed integer bounds.
Usually fails on: Large inputs wrap around unexpectedly.
Fix: Use wider types, modular arithmetic, or rearranged operations.