这道题直接按照题意来解,建立坐标系和移动方案,思路是比较简单的。只是需要注意需要使用set来判断是否遇到障碍,否则会超时。

int robotSim(vector<int>& commands, vector<vector<int>>& obstacles) {

    int N = commands.size();
int M = obstacles.size(); //向上 Wx=0,Wy=1
//向左 Wx=-1,Wy=0
//向下 Wx=0,Wy=-1
//向右 Wx=1,Wy=0 set<pair<int, int>> st;
for (auto &obs : obstacles)
{
st.insert(make_pair(obs[], obs[]));
} int Wx = ;
int Wy = ; int Px = ;
int Py = ;
int maxdistance = ; for (int i = ; i < N; i++)
{
int cmd = commands[i];//当前指令
if (cmd == -)//左转
{
if (Wx == && Wy == )//上-->左
{
Wx = -;
Wy = ;
}
else if (Wx == - && Wy == )//左-->下
{
Wx = ;
Wy = -;
}
else if (Wx == && Wy == -)//下-->右
{
Wx = ;
Wy = ;
}
else if (Wx == && Wy == )//右-->上
{
Wx = ;
Wy = ;
}
}
else if (cmd == -)//右转
{
if (Wx == && Wy == )//上-->右
{
Wx = ;
Wy = ;
}
else if (Wx == - && Wy == )//左-->上
{
Wx = ;
Wy = ;
}
else if (Wx == && Wy == -)//下-->左
{
Wx = -;
Wy = ;
}
else if (Wx == && Wy == )//右-->下
{
Wx = ;
Wy = -;
}
}
else//移动 1<=x<=9
{
//此次移动之前的起点位置为Px和Py
int Tmpx = Px;
int Tmpy = Py;
while (cmd > )
{
//以(Wx,Wy)为步进,移动一次
Tmpx += Wx;
Tmpy += Wy; if (st.find(make_pair(Tmpx, Tmpy)) != st.end())
{
Tmpx -= Wx;
Tmpy -= Wy;
cmd = ;
}
cmd--;
}
int distance = Tmpx*Tmpx + Tmpy*Tmpy;
if (maxdistance < distance)
{
maxdistance = distance;
}
Px = Tmpx;
Py = Tmpy;
}
} return maxdistance;
}

leetcode874的更多相关文章

  1. [Swift]LeetCode874. 模拟行走机器人 | Walking Robot Simulation

    A robot on an infinite grid starts at point (0, 0) and faces north.  The robot can receive one of th ...

  2. Leetcode874.Walking Robot Simulation模拟行走的机器人

    机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方.该机器人可以接收以下三种类型的命令: -2:向左转 90 度 -1:向右转 90 度 1 <= x <= 9:向 ...

  3. LeetCode874 模拟行走机器人(简单模拟—Java之HashSet简单应用)

    题目: 机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方.该机器人可以接收以下三种类型的命令: -2:向左转 90 度-1:向右转 90 度1 <= x <= 9 ...

随机推荐

  1. cdq分治入门and持续学习orz

    感觉cdq分治是一个很有趣的算法 能将很多需要套数据结构的题通过离线来做 目前的一些微小的理解 在一般情况下 就像求三维偏序xyz 就可以先对x排序 然后分治 1 cdq_x(L,M) ; 2 提取出 ...

  2. javascript(jquery)_匿名函数

    一.什么是匿名函数 匿名函数:就是没有函数名的函数 二.为什么使用匿名函数 1.最大的用处就是创建闭包 三.匿名函数定义(怎么使用匿名函数) 1.这种方法使用了Function构造函数,把参数列表和函 ...

  3. Don't add unneeded context不要加不需要的文本

  4. java:正则匹配Pattern,Matcher

    一.正则匹配Pattern,Mather String s = "aa424fsfsd92lfjw2755097"; Pattern p = Pattern.compile(&qu ...

  5. Lucene.Net 优化索引生成,即搜索显示优化

    最近发现站内搜索引擎响应速度很慢,因为刚来公司之前技术员跑了源码什么的都没留下.只好自己手动破解源代码dll查找问题所在! 这个问题代码就暂时不贴了这里只写思路 原逻辑:经过整体分析后发现之前是使用 ...

  6. Alfred 2

    Alfred https://www.alfredapp.com/ Alfred Workflow https://www.alfredapp.com/workflows/ http://www.pa ...

  7. poj 1324 状态压缩+bfs

    http://poj.org/problem?id=1324 Holedox Moving Time Limit: 5000MS   Memory Limit: 65536K Total Submis ...

  8. 八大排序算法原理以及Java实现(直接插入排序)

    概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大, ...

  9. Java 简单图片截取

    package cn.byref.demo.image; import java.awt.Rectangle; import java.awt.image.BufferedImage; import ...

  10. Thinkphp5.0 获取新增数据的ID

    // 方法1 insertGetId方法新增数据并返回主键值使用getLastInsID方法: Db::name('user')->insert($data); $userId = Db::na ...