G
N
I
D
A
O
L

每日一题:困于环中的机器人

题目链接:https://leetcode.cn/problems/robot-bounded-in-circle/

# 解题思路

此题具有轮回性,只要重复执行四次指令串后能回到 (0,0),则一定会在转圈圈。

特殊的,如果指令串本身就是一个转圈圈的指令,就无须再循环执行指令串

# 提交结果

image.png

# 代码

class Solution {
    public boolean isRobotBounded(String instructions) {
        /**
         * 方向枚举:
         *   0 - 向北
         *   1 - 向东
         *   2 - 向南
         *   3 - 向西
         *
         * L 表示 -1,R 表示 +1
         * 
         * 当前方向 = (4 + 前一方向 + L|R) % 4
         * 
         * 如果存在循环,一定会在四个轮回中回到某个位置,否则,就不会被困在环中
         */
        char[] chs = instructions.toCharArray();
        int n = chs.length;
        //pos [0], pos [1] 表示坐标,d 表示方向
        int[] pos = new int[2];
        int d = 0;
        for (int round = 1; round < 5; ++round) {
            for (int i = 0; i < n; ++i) {
                if (chs[i] == 'L' || chs[i] == 'R') {
                    // 调整方向
                    d = (d + 4 + (chs[i] == 'R' ? 1 : -1)) % 4;
                } else {
                    // 直走一步
                    move(pos, d);
                }
            }
            // 回到了起点,直接返回
            if (pos[0] == 0 && pos[1] == 0) return true;
        }
        return false;
    }
    private void move(int[] pos, int d) {
        switch(d) {
            case 0: 
                ++pos[1];
                break;
            case 1:
                ++pos[0]; 
                break;
            case 2: 
                --pos[1];
                break;
            case 3: 
                --pos[0];
                break;
            default: 
                break;
        }
    }
}
更新于 阅读次数

😉觉得写的还不错,请我喝杯咖啡吧😁

独步凌波 微信支付

微信支付

独步凌波 支付宝

支付宝