这道题直接按照题意来解,建立坐标系和移动方案,思路是比较简单的。只是需要注意需要使用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. 0.00-050613_zc

    1. ROM bios --> 启动盘第一个扇区(此处内容为boot) 加载到 内存位置0x7C00(31KB) --> 执行权转移(也就相当于跳转) boot程序主要功能:把 软盘/映像 ...

  2. scheduler configuration options

    Table 4.53. Description of scheduler configuration options Configuration option = Default value Desc ...

  3. c# 判断一个ip通不通 能不能ping通

    方法一: 已经证实能用的. using System; using System.Collections.Generic; using System.ComponentModel; using Sys ...

  4. 2017-03-01 Oracle10g的安装与配置使用

    今天项目中又用到了Oracle,时隔三年没有碰过Oracle,之前在做某城市公共自行车管理系统时使用的是Orace10g版本,Oracle给我最大的感觉就是安装上以后,电脑就会变得很卡,所以大家当不使 ...

  5. 继续吐槽XE5中的boost::thread问题:找不到CC32130MT.DLL

    在XE5中,随便创建一个HelloWorld程序,加入boost::thread的功能,编译链接后,无法运行,无法调试,提示找不到CC32130MT.DLL 这个DLL名字看上去好像是跟多线程有关的, ...

  6. 使用GridSearchCV寻找最佳参数组合——机器学习工具箱代码

    # -*- coding: utf-8 -*- import numpy as np from sklearn.feature_extraction import FeatureHasher from ...

  7. python虚拟开发环境搭建(virtualenv和virtualenvwrapper)

    虚拟开发环境的搭建 (0) 搭建虚拟环境的意义 使不同的开发环境独立 环境升级不影响其他开发环境,也不影响全局 防止包管理的混乱 (1) 指定 虚拟环境的创建目录 环境变量设置 创建 WORKON_H ...

  8. LeetCode Target Sum

    原题链接在这里:https://leetcode.com/problems/target-sum/description/ 题目: You are given a list of non-negati ...

  9. Unity3d-WWW实现图片资源显示以及保存和本地加载

    本文固定连接:http://blog.csdn.net/u013108312/article/details/52712844 WWW实现图片资源显示以及保存和本地加载 using UnityEngi ...

  10. 使用.NET中的XML注释(一) -- XML注释标签讲解

    一.摘要 .Net允许开发人员在源代码中插入XML注释,这在多人协作开发的时候显得特别有用. C#解析器可以把代码文件中的这些XML标记提取出来,并作进一步的处理为外部文档. 这篇文章将展示如何使用这 ...