【力扣每日一题】2023.7.19 模拟行走机器人

题目:

【力扣每日一题】2023.7.19 模拟行走机器人_第1张图片

示例:

【力扣每日一题】2023.7.19 模拟行走机器人_第2张图片

分析:

机器人模拟类题目,力扣里有很多这样的模拟题,就是模拟机器人在坐标系上行走.

套路就是记下每个方向行走后,x轴和y轴的变化(代码中的direction),例如 direction[0] 就表示向北走一次,y轴+1,x轴不变.然后左转则将指向direction的下标减一(若是小于0则变成3,direction[3]表示向西).右转则将指向direction的下标加一(若是大于3则变成0,direction[0]表示向北).

每次行走只需要将现在所在的坐标([i,j])加上direction即可.

本题添加了障碍,我们可以将障碍先存进set中,方便检测是否遇到障碍,然后再模拟过程中检查是否遇到障碍,若是遇到障碍则回退一格.

代码+运行结果:

class Solution {
public:
    //方向: 北 东 南 西
    vector>direction{{1,0},{0,1},{-1,0},{0,-1}};
    int robotSim(vector& commands, vector>& obstacles) {
        int res=0;
        //将障碍存入set中方便检测.不用set,在检查的时候改成遍历obstacles也是可以的.
        set>s;
        for(const auto &obstacle:obstacles) s.insert(obstacle);
        int flag=0;
        int x=0,y=0;
        for(const int &command:commands){
            //如果遇到转向指令则将指向direction的下标改变
            if(command==-1){
                if(flag==3) flag=0;
                else flag++;
                continue;
            }else if(command==-2){
                if(flag==0) flag=3;
                else flag--;
                continue;
            }else{
                //开始行走
                for(int i=0;i

【力扣每日一题】2023.7.19 模拟行走机器人_第3张图片

 

你可能感兴趣的:(力扣每日一题,leetcode,算法,c++,数据结构)