力扣每日一题1041. 困于环中的机器人,做题笔记

文章讲述了如何解决一个编程问题,即给定一个机器人在无限平面上,接收特定的行走指令,判断是否会形成环使其无法离开起点。关键在于分析机器人执行指令后的坐标变化和方向,特别是当机器人在原点但不面向北方时,可能形成环。代码示例展示了如何根据机器人的朝向和移动来判断是否成环。
摘要由CSDN通过智能技术生成

目录

题目链接:

题目论述:

 第一眼想法:

重点:成环

代码如下:



题目链接:

1041. 困于环中的机器人

题目论述:

在无限的平面上,机器人最初位于 (0, 0) 处,面朝北方。注意:

北方向 是y轴的正方向。
南方向 是y轴的负方向。
东方向 是x轴的正方向。
西方向 是x轴的负方向。
机器人可以接受下列三条指令之一:

"G":直走 1 个单位
"L":左转 90 度
"R":右转 90 度
机器人按顺序执行指令 instructions,并一直重复它们。

只有在平面中存在环使得机器人永远无法离开时,返回 true。否则,返回 false。


 第一眼想法:

做不出来。。卡了,我还以为需要用哈希表去存储每次的坐标,然后再查找是否在之前有存储过,但看了题解实际上并不用,也就是对成环的条件不清晰。

重点:成环

1.若一条指令执行过后,机器人在原点,则能成环。

不在原点的情况,可设此时坐标位移为(x,y):

2.此时机器人面向北方,则说明机器人没有改变方向,无法成环。(第一次指令位移为(x,y),第二次则为(2x,2y),永远无法到达原点)

3.此时机器人面向南方,那么再执行一次指令时会回到原点。(第一次指令位移为(x,y),又因此时面向南方,则第二次指令位移会是(-x,-y),回到了原点)。

4.面向东、西两方,根据面向南方的情况进行分析,可以知道在每执行四次指令时会回到原点

也就是说只有执行一次指令后不在原点且面向北方的情况会不成环。 

代码如下:

class Solution {
public:
    bool isRobotBounded(string instructions) {
        vector<vector<int>> fangxiang{{0,1}, {1,0}, {0,-1}, {-1,0}};   //分别对应北东南西
        int index = 0;         //用来记录朝向
        int  x= 0, y = 0;
        for (char i : instructions) {
            if(i == 'G'){
                x += fangxiang[index][0];    
                y += fangxiang[index][1];
            }
            else if(i=='L'){
                index += 3;     //左转90度面朝西
                index %= 4;     //控制在4的范围内
            }
            else {
                index ++;     //同理
                index %= 4;
            }
        }
        return index != 0 || (x == 0 && y == 0);
    }
};

需要注意在写二维数组的时候,需要按顺时针或逆时针的方向遍历写出,我这里给出的是按顺时针。

顺逆时针决定了for循环中index的运算处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值