874 LeetCode 模拟行走机器人

题目描述:
在这里插入图片描述
思路:
1、使用哈希表记录障碍物的坐标
2、使用字符串记录机器人走的方向
3、最后求出机器人所在位置的最大距离

代码如下:

class Solution {
public:
    int robotSim(vector<int>& commands, vector<vector<int>>& obstacles) {
        vector<int>res;
        res.push_back(0);
        res.push_back(0);
        map<vector<int>,int>obs;
        for(int i=0;i<obstacles.size();i++){
            obs[obstacles[i]]++;
        }
        int sum=0;
        string cur="up";
        for(int i=0;i<commands.size();i++){
            if(commands[i]==-1){
                if(cur=="up")
                cur="right";
                else if(cur=="right")
                cur="down";
                else if(cur=="down")
                cur="left";
                else if(cur=="left")
                cur="up";
            }
            if(commands[i]==-2){
                if(cur=="up")
                cur="left";
                else if(cur=="left")
                cur="down";
                else if(cur=="down")
                cur="right";
                else if(cur=="right")
                cur="up";
            }
            if(commands[i]>=1&&commands[i]<=9){
                if(cur=="up")
                for(int j=1;j<=commands[i];j++){
                    res[1]+=1;
                    if(obs[res]>0){
                    res[1]-=1;
                    break;}
                }
                if(cur=="left")
                for(int j=1;j<=commands[i];j++){
                    res[0]+=-1;
                    if(obs[res]>0){
                    res[0]+=1;
                    break;}
                }
                if(cur=="down")
                for(int j=1;j<=commands[i];j++){
                    res[1]+=-1;
                    if(obs[res]>0){
                    res[1]+=1;
                    break;}
                }
                if(cur=="right")
                for(int j=1;j<=commands[i];j++){
                    res[0]+=1;
                    if(obs[res]>0){
                    res[0]-=1;
                    break;}
                }
            }
            sum=max(sum,res[0]*res[0]+res[1]*res[1]);
        }
        return sum;
    }
};
发布了133 篇原创文章 · 获赞 0 · 访问量 1119

猜你喜欢

转载自blog.csdn.net/peachzy/article/details/104495264