tws mirror java设计模式 建网站 EasyCVR HTTP请求 javafx vue版本 vue前端 php零基础入门视频 less用法 jquery的each循环 docker的安全特性有哪些 coreldraw学习 linuxmysql启动命令 docker启动命令 python多线程 python中str函数 python零基础教程 python命令大全 java连数据库 java基本语法 java开发学习 java获取现在时间 java获取 java特性 java的安装 linux云服务器 linux装机 电子书之家 不寻常的指南针 倒计时计时器 超级力量2修改 凯恩与林奇2下载 博途v14安装教程 dos系统下载 ajaxpro 批处理for 砸金蛋抽奖活动 内存条有什么用 小米手环怎么连接手机
当前位置: 首页 > 学习教程  > 编程语言

LeetCode第874题解析

2020/8/11 19:54:36 文章标签:

机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令:

  • -2:向左转 90 度
  • -1:向右转 90 度
  • 1 <= x <= 9:向前移动 x 个单位长度

在网格上有一些格子被视为障碍物。

第 i 个障碍物位于网格点  (obstacles[i][0], obstacles[i][1])

机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,但仍然可以继续该路线的其余部分。

返回从原点到机器人所有经过的路径点(坐标为整数)的最大欧式距离的平方。

示例 1:

输入: commands = [4,-1,3], obstacles = []
输出: 25
解释: 机器人将会到达 (3, 4)

示例 2:

输入: commands = [4,-1,4,-2,4], obstacles = [[2,4]]
输出: 65
解释: 机器人在左转走到 (1, 8) 之前将被困在 (1, 4) 处

提示:

  1. 0 <= commands.length <= 10000
  2. 0 <= obstacles.length <= 10000
  3. -30000 <= obstacle[i][0] <= 30000
  4. -30000 <= obstacle[i][1] <= 30000
  5. 答案保证小于 2 ^ 31
class Solution {
public:
    int robotSim(vector<int>& commands, vector<vector<int>>& obstacles) {
        //方向向量
        int direx[] = {0, 1, 0, -1};
        int direy[] = {1, 0, -1, 0};
        //记录机器人的现在坐标
        int curx = 0, cury = 0;
        //记录现在的方向
        int curdire = 0;
        int comLen = commands.size();
        //保存结果
        int ans = 0;
        //用set记录障碍物的位置
        set<pair<int,int>> obstacleSet;
        for(int i = 0; i < obstacles.size(); ++i) {
            obstacleSet.insert(make_pair(obstacles[i][0], obstacles[i][1]));
        }
        for(int i = 0; i < comLen; ++i) {
            //如果是-2,向左转90度,取模是为了防止超出数组下标
            if(commands[i] == -2) {
                curdire = (curdire + 3) % 4;
            }
            //如果是-1,向右转90度
            else if(commands[i] == -1) {
                curdire = (curdire + 1) % 4;
            }
            else {
                for(int j = 0; j < commands[i]; ++j) {
                    //机器人尝试向前走一步,并判断是否会遇到障碍物
                    int nx = curx + direx[curdire];
                    int ny = cury + direy[curdire];
                    if(obstacleSet.find(make_pair(nx, ny)) == obstacleSet.end()) {
                        curx = nx;
                        cury = ny;
                        ans = max(ans, curx * curx + cury * cury);
                    }
                    else {
                        break;
                    }
                }
            }
        }
        return ans;
    }
};

 

 

 


本文链接: http://www.dtmao.cc/news_show_100234.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?