LeetCode 1041. 困于环中的机器人

题目描述

1041. 困于环中的机器人

思路分析

解法一:模拟一轮指令(推荐)

核心思路

  • 机器人初始朝北,执行一轮指令后:
    • 若回到原点,则必在环内。
    • 若朝向发生改变,则多次重复后也会回到原点。
  • 仅当位置未回到原点且方向仍朝北时不在环内。


复杂度分析

  • 时间复杂度:O(n),其中 n 表示指令长度。
  • 空间复杂度:O(1),仅使用常数额外空间。
class Solution {
    public boolean isRobotBounded(String instructions) {
        int x = 0;
        int y = 0;
        int dir = 0;
        int[][] dirs = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};

        for (int i = 0; i < instructions.length(); i++) {
            char c = instructions.charAt(i);
            if (c == 'G') {
                x += dirs[dir][0];
                y += dirs[dir][1];
            } else if (c == 'L') {
                dir = (dir + 3) % 4;
            } else {
                dir = (dir + 1) % 4;
            }
        }

        return (x == 0 && y == 0) || dir != 0;
    }
}
func isRobotBounded(instructions string) bool {
	x, y := 0, 0
	dir := 0
	dirs := [][]int{{0, 1}, {1, 0}, {0, -1}, {-1, 0}}

	for i := 0; i < len(instructions); i++ {
		c := instructions[i]
		if c == 'G' {
			x += dirs[dir][0]
			y += dirs[dir][1]
		} else if c == 'L' {
			dir = (dir + 3) % 4
		} else {
			dir = (dir + 1) % 4
		}
	}

	return (x == 0 && y == 0) || dir != 0
}

相似题目

题目 难度 考察点
1041. 困于环中的机器人 中等 模拟
874. 模拟行走机器人 中等 模拟
657. 机器人能否返回原点 简单 模拟
136. 只出现一次的数字 简单 模拟、状态
54. 螺旋矩阵 中等 模拟
本文作者:
本文链接: https://hgnulb.github.io/blog/2024/64431411
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!