LeetCode874:机器人路径模拟

【算法题解】24. 模拟机器人行走 这是一道中等难度的题,主要学习怎么应用方向数组去解题。 阅读详情

题目:

A robot on an infinite grid starts at point (0, 0) and faces north.  The robot can receive one of three possible types of commands:

  • -2: turn left 90 degrees
  • -1: turn right 90 degrees
  • 1 <= x <= 9: move forward x units

Some of the grid squares are obstacles. 

The i-th obstacle is at grid point (obstacles[i][0], obstacles[i][1])

If the robot would try to move onto them, the robot stays on the previous grid square instead (but still continues following the rest of the route.)

Return the square of the maximum Euclidean distance that the robot will be from the origin.

题目大意是说有一个机器人初始时在坐标(0,0)位置,在无限大的平面中行走,初始时方向正北,给定一系列命令,要求寻找机器人在某个点离远点最远距离的平方。

解题思路:

这道题在leetcode难度是simple,也就是简单,实际上这道题思路简单,但是想写出完整的代码还是不容易的。首先,我们需要定义方向,这个可以任意定义,我是这么做的,声明一个变量direction,它的取值集合为{0,1,2,3},分别表示正北,正东,正南,正西四个方向,再定义两个变量currentX,currentY,表示当前机器人所在的坐标,另外需要考虑的是有障碍物的情况,每一个障碍物的坐标已经保存在obstacles数组中,接下来以一个具体的案例为例解释应该如何做:

假设某一次机器人在(2,4)这个位置,此时direction=3,表示机器人面朝正西,如果commands[i]<0,表示只需要改变方向,也就是修改direction的值。

commands[i]=-1,表示向右转,direction=(direction+1)%4,这里取模的主要考虑到direction=3时,向右转到正北,direction应该等于零;

commands[i]=-2,表示向左转,direction=(direction+3)%4,向左转一次可以认为是向右转3次。

commands[i]=4.表示向前进4格,如果此时direction=3,表示应该向正西方向前进4格,我们的第一个问题是,能向前进这么多吗?

能不能要看从当前的坐标,然后向西进4格这条路径上是否有障碍物,我们知道,此时机器人在(2,4)位置上,向西前进4格如果没有障碍物,应该到达(-2,4)的位置,也就是说,向西前进y坐标不变,此时,我们应该遍历障碍物数组,看看是否有障碍物落在这条线上,遍历的时候obstacles[j][1]=4&&obstacles[j][0]>=-2&&obstacles[j][0]<2,就表示该路径中存在一个障碍物,这里要注意,为什么-2那个地方要取等号,而2可以不取等号,假设obstacles[j][0]=-2,表示刚好目标位置(-2,4)是一个障碍物,按照题意,机器人不能到达障碍物,只能到达障碍物的前一位置,因此,取等号的时候也要考虑进去。假设obstacles[j][0]=2,这实际上是不存在的,因为机器人不可能处在一个障碍物上,只要我们正确更新机器人的行走路径。另外还需要考虑一个问题,就是当这条路径上有不止一个障碍物应该怎么取舍,比如从(2,4)到(-2,4)这条路上,如果有(-1,4)、(0,4)两个障碍物,应该怎么办呢,按照题目意思,应该去里起点(2,4)最近的那个障碍物(0,4)的前一个位置,也就是机器人此时只能走一步,走到(1,4)位置。

最后需要思考一个问题,什么时候需要计算距离,答案是每当机器人走到一个新的坐标,需要考虑下一步应该怎么走的时候,就应该计算一次距离,然后更新结果。

java代码如下:

    public int[]getDirection(int direction,int currentX,int currentY,int[][]obstacles,int step){
        //该函数的含义是,给定direction,取值在0,1,2,3,当前位置坐标是(currentX,currentY),需要向direction方向前进
        //step步,当然,所有的障碍物都在obstacles中存储
        int[]result=new int[2]; // 该变量含义是在这种情况下最终返回的结果坐标是(result[0],result[1])
        int i,aimX=0,aimY=0;// 目标位置坐标是(aimX,aimY)
        switch(direction){ // 根据direction的方向前进
        case 0: // 表示应该往正北方向前进step
            aimX=currentX;// 往正北方向前进x坐标是不变的
            aimY=currentY+step; // 往正北方向前进step步,那么aimY应该在currentY的基础上加上step,
            //如果此时这条路径上没有障碍物,那么aimY得到正确更新
            for(i=0;i<obstacles.length;i++){
                if(obstacles[i][0]==aimX&&obstacles[i][1]>currentY&&obstacles[i][1]<=aimY)
                    aimY=obstacles[i][1]-1;
            }
            // for循环中遍历所有障碍物,如果发现在这条路径上存在障碍物,那么应该在障碍物的前一个点停下来
            break;
        case 1:
            aimX=currentX+step;
            aimY=currentY;
            for(i=0;i<obstacles.length;i++){
                if(obstacles[i][1]==aimY&&obstacles[i][0]>currentX&&obstacles[i][0]<=aimX)
                    aimX=obstacles[i][0]-1;
            }
            break;
        case 2:
            aimX=currentX;
            aimY=currentY-step;
            for(i=0;i<obstacles.length;i++){
                if(obstacles[i][0]==aimX&&obstacles[i][1]<currentY&&obstacles[i][1]>=aimY)
                    aimY=obstacles[i][1]+1;
            }
            break;
        default:
            aimY=currentY;
            aimX=currentX-step;
            for(i=0;i<obstacles.length;i++)
                if(obstacles[i][1]==aimY&&obstacles[i][0]<currentX&&obstacles[i][0]>=aimX)
                    aimX=obstacles[i][0]+1;
        }
        result[0]=aimX;
        result[1]=aimY;
        return result;
    }
    public int robotSim(int[] commands, int[][] obstacles) {
        int direction=0,currentX=0,currentY=0,i,result=0,tempResult=0;
        // direction表示机器人当前的方向,(currentX,currentY)表示机器人当前所在的坐标
        // result表示最终离原点最长距离的平方,tempResult表示当前坐标离远点的距离的平方
        if(commands==null||commands.length<=0)
            return result;
        for(i=0;i<commands.length;i++){
            if(commands[i]>0){
                int []directionIndex=getDirection(direction, currentX, currentY, obstacles, commands[i]);
                currentX=directionIndex[0];
                currentY=directionIndex[1];
                tempResult=currentX*currentX+currentY*currentY;
                result=tempResult>result?tempResult:result;
            }
            else{ // commands[i]<0表示只需要改变方向
                if(commands[i]==-1) // commands[i]=-1,表示右转,方向+1
                    direction=(direction+1)%4;
                else
                    direction=(direction+4-1)%4;
            }
        }
        System.out.println(result);
        return result;
    }

874. 模拟行走机器人 二维模拟与坐标系统理解方向控制技巧障碍物避让逻辑哈希集合优化查询效率路径模拟与距离计算这是一道非常经典的模拟题,也是 LeetCode 中“机器人路径”、“障碍检测”等题型的入门代表。熟练掌握后可举一反三,拓展到图形学、路径规划、智能体模拟等场景。也可以留言你在做这道题时遇到的坑,我们一起交流学习! 阅读详情

相关推荐

leetcode: 874. 模拟行走机器人

顺时针方向,先确定方向,然后一步一步走,遇到障碍就break,如果没有就更新坐标,计算距离,更新最大距离;障碍可以使用哈希表,加快查询速度。机器人在一个无限大小的 XY 网格平面上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令。返回从原点到机器人所有经过的路径点(坐标为整数)的最大欧式距离的平方。(即,如果距离为 5 ,则返回 25 )机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,但仍然可以继续尝试进行该路线的其余部分。在网格上有一些格子被视为障碍物。..

uncle_ll的博客 711

AcWing周赛T3 机器人移动

AcWing周赛T3

ACMtourist的博客 477

遗传算法进行机器人路径规划代码

基于 遗传算法 进行 机器人 路径规划 代码。。。。。

【Leetcode】第136场周赛 (前三题)

5055. 困于环中的机器人 在无限的平面上,机器人最初位于 (0,0)(0, 0)(0,0) 处,面朝北方。机器人可以接受下列三条指令之一: &quot;G&quot;&quot;G&quot;"G":直走 111 个单位 &quot;L&quot;&quot;L&quot;"L":左转 909090 度 &quot;R&a...

小二笙的博客 286

RRT_Visualizer_Java:用于机器人路径规划的简单基于 Java 的 RRT 可视化器

RRT_Visualizer_Java 一个简单的基于 Java 的 RRT 可视化工具,用于机器人路径规划特别感谢 NIKOLAUS CORRELL 出色的 iRRT 模拟器 ( ),这是一个很好的参考。

基于Simulink的直流电机双闭环调速系统抗扰动仿真与参数优化

本文详细介绍了基于Simulink的直流电机双闭环调速系统仿真与参数优化方法。通过构建转速外环与电流内环的仿真模型,阐述了利用工程设计法整定PI参数的核心步骤,并重点探讨了如何优化系统参数以增强其抗负载突变等扰动的能力,实现快速、平稳的调速性能。

weixin_29061997的博客 192

RobotStudio机器人运行路径的创建与仿真

本文在一个已经搭建好机械模型,同时完成机器人系统的创建后的机器人运行路径的创建过程。工程文件已上传到网盘,包括:初始工程文件(03Practice_init.rspag)、完成后的工程文件(03Practice.rspag)、模型文件。

个人博客 2万+

TypeScript领域建模实战:基于斯坦福本体论七步法构建健壮数据模型

在软件工程中,领域建模是连接业务需求与技术实现的关键桥梁,其核心在于对业务概念、属性及其关系的显式定义与规范。通过系统化的建模方法,开发者能够将模糊的领域知识转化为清晰、可扩展且类型安全的数据结构,从而在编译时捕获潜在错误,提升代码质量与可维护性。这一过程的技术价值在于实现了从业务逻辑到类型系统的无损映射,确保了设计的一致性。在实践中,结合TypeScript的静态类型检查与Zod的运行时验证,可以构建起从概念到代码再到数据库的三层一致性约束。本文以电商、博客等常见应用场景为例,深入解析如何运用源自斯坦福知

weixin_42551967的博客 383

【leetcode】面试题 08.02. 迷路的机器人

设想有个机器人坐在一个网格的左上角,网格 r 行 c 列。机器人只能向下或向右移动,但不能走到一些被禁止的网格(有障碍物)。设计一种算法,寻找机器人从左上角移动到右下角的路径。 网格中的障碍物和空位置分别用 1 和 0 来表示。 返回一条可行的路径,路径由经过的网格的行号和列号组成。左上角为 0 行 0 列。如果没有可行的路径,返回空数组。 示例 1: 输入: [ [0,0,0], [0,1,0], [0,0,0] ] 输出: [[0,0],[0,1],[0,2],[1,2],[2,2]] 解释: 输入中

爱小七爱生活的博客 446

VS2019 C# MySQL 学生信息增删改查(一、增删)

VS2019 C# MySQL 学生信息增删改查 由于刚刚学习VS2019,入手的第一个例子是编写一个简单的增删改查。这里,我以学生信息为例,进行详细的过程描述以及代码实现。 一、 新建一个Windows窗体应用程序 1、创建新项目界面,如下图所示。 2、更改项目名称,当然不修改也可以。我这里的是“StudentInfoSystem”;项目存放位置路径根据自己需要进行更改;“将解决方案和项目放在同一目录中”前面的勾选框,选不选都可以;点击“创建”,如下图所示。 二、前期准备工作 1、将Form1属性中

青哥 1万+

【Python实战解析】从数据爬取到房价预测:一个完整的数据科学项目流程拆解

本文详细拆解了一个完整的Python数据科学项目流程,从爬取长沙二手房数据到房价预测模型构建。通过实战案例,介绍了数据爬取、清洗、可视化及模型优化的关键技巧,帮助开发者掌握Python在数据分析中的应用,提升程序开发能力。

weixin_30379531的博客 411

LeetCode:874.模拟行走机器人

这道题的难点不在于算法的深度,而在于细节的处理。特别是如何优雅地处理方向旋转(利用取模)以及如何高效地判断障碍物(利用哈希集合)。通过一步步模拟机器人的行动,我们就能轻松得到答案。

qq_72758246的博客 82

SAP ATP可用性检查简介

系统中建立此单时,SAP就会做一个所谓的检查,检查一下我们预先设定的考虑因素,能否满足客户的要求,什么时候可以满足,这就是可用性检查的功能。2、同样的在创建生产订单的时候也有ATP的检查,生产订单是100PC,要求2024-07-01生产完成,系统就会根据配置进行物料的可用性的检查,看物料是否能够满足生产同时能够满足交期。14: 表示相关预留的选项,与10的区别在于,10是一般是表示我们用MB21建立的,而14是表示由于相关预留,即此预留是来自于其他物料,如生产订单所产生的预留。

我小时候很黑的博客 3374

A.每日一题:874. 模拟行走机器人

A.每日一题:874. 模拟行走机器人解析

要努力去发光,而不是被照亮~ 400

EMC辐射整改常用的4种整改方法

例如,产品设计研发工程师们根据需求,设计出效果良好的滤波电路,置入产品I/O(输入/输出)接口的前级,可使因传导而进入系统的干扰噪声消除在电路系统的入口处;通过选择元器件和合理安排的电路系统,使干扰的影响减少。有些频率点是通过电路板上走线分布参数所决定的,通过前述方法不大有用,此类整改通过在走线中增加小的电感、电容、磁珠来改变电路参数结构,使其移到限值要求较高的频率点上。电线电缆的分类整理在电子设备中,线间耦合是一种重要的途径,也是造成干扰的重要原因,因为频率的因素,可大体分为高频耦合与低频耦合。

学海无涯的专栏 3122

YOLOv11改进 | 集成FEM、FFM与SCAM即插即用模块:特征增强、融合与空间上下文建模新范式

FEM解决特征表达不足问题,增强关键特征响应FFM优化多尺度融合,提升小目标检测精度SCAM建模空间上下文,改善目标交互预测在保持YOLOv11实时性优势的同时,实现mAP+8.1%的显著提升,特别在复杂光照、密集目标、交互预测场景表现突出。其模块化设计使开发者可根据需求灵活组合,为各种复杂场景提供定制化解决方案。未来,随着跨模态扩展与神经架构搜索的深入,YOLOv11-FSC将进一步推动目标检测技术向更智能、更高效的方向发展。

走向CTO的路上... 988

leetcode 874.模拟行走机器人

leetcode 874 题目描述 机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令: -2:向左转 90 度 -1:向右转 90 度 1 <= x <= 9:向前移动 x 个单位长度 在网格上有一些格子被视为障碍物。 第 i 个障碍物位于网格点 (obstacles[i][0], obstacles[i][1]) 机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,但仍然可以继续该路线的其余部分。 返回从原点到机器人所有

qq_42791848的博客 328

【数据集】全球预报系统GFS概述:数据下载及处理

【数据集】全球预报系统GFS概述:数据下载及处理

WW、forever的博客 5750

算法:874. 模拟行走机器人

算法 874. 模拟行走机器人 机器人在一个无限大小的 XY 网格平面上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令 commands : -2 :向左转 90 度 -1 :向右转 90 度 1 <= x <= 9 :向前移动 x 个单位长度 在网格上有一些格子被视为障碍物 obstacles 。第 i 个障碍物位于网格点 obstacles[i] = (xi, yi) 。 机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,但仍然可以继续尝

AI架构师易筋 995

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

LeetCode JAVA解题---874. 模拟行走机器人

LeetCode 题库 全 JAVA 解题 874. 模拟行走机器人 原题回顾: 机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令: -2:向左转 90 度 -1:向右转 90 度 1 <= x <= 9:向前移动 x 个单位长度 在网格上有一些格子被视为障碍物。 第 i 个障碍物位于网格点 (obstacles[i][0...

qq_28295947的博客 665

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

leetcode 874 模拟行走机器人

874. 模拟行走机器人 难度简单120收藏分享切换为英文接收动态反馈 机器人在一个无限大小的网格上行走,从点(0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令: -2:向左转90 度 -1:向右转 90 度 1 <= x <= 9:向前移动x个单位长度 在网格上有一些格子被视为障碍物。 第i个障碍物位于网格点 (obstacles[i][0], obstacles[i][1]) 机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,但仍然...

weixin_41579872的博客 275

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

​LeetCode解法汇总874. 模拟行走机器人

遍历commands的时候,方向自然不用说,如果遇到了前进或者后退,则判断当前轴距离原点最近的点长度,如果大于command则移动command,否则移动最近长度。* 但是commands的遍历肯定是要的,所以我们就想办法解决obstacles,把其变为一个O(1)或者O(lgn)复杂度的查询。机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,但仍然可以继续尝试进行该路线的其余部分。3. 向东移动 1 个单位,然后被位于 (2, 4) 的障碍物阻挡,机器人停在 (1, 4)

分享+记录 1239

模拟行走机器人[874]

模拟行走机器人[874]题目题解 题目 机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令: -2:向左转 90 度 -1:向右转 90 度 1 <= x <= 9:向前移动 x 个单位长度 在网格上有一些格子被视为障碍物。 第 i 个障碍物位于网格点 (obstacles[i][0], obstacles[i][1]) 机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,但仍然可以继续该路线的其余部分。 返回从原点到机

hsc的博客 585

LeetCode 874. 模拟行走机器人【模拟,哈希集合】中等

A robot on an infinite grid starts at point (0, 0) and faces north. The robot can receive one of three possible types of commands: -2: turn left 90 degrees -1: turn right 90 degrees 1 <= x <= 9: move forward x units Some of the grid squares are ob

memcpy0的博客 529

Leetcode 874. 模拟行走机器人

设映射后的数字为kx+y,我们想知道k为多少时不会发生碰撞。当碰撞时kx1+y1=kx2+y2,解出来k=(y2-y1)/(x1-x2),由于x,y的取值范围为[-30000,30000],那么k的取值范围为[-60000,60000],这个范围内的值都可能碰撞,比如k=60000时,(1,-30000)和(0,30000)算出来都是30000。除了以上,还要去想上下左右下标变换。嗯,很有意思的一个题。

JehanRio's Private Blog 223

【LeetCode日记】 874. 模拟行走机器人

这是一道 LeetCode 难度为 easy 的题目,没有高深的算法,有的只是套路,我们来看下。原题地址:https://leetcode-cn.com/problems/walking...

azl397985856的专栏 292
上一篇: scrapy爬虫的相关技术
下一篇: leetcode 746.爬楼梯的最小代价(从暴力递归到动态规划)
spencersong
博客等级 码龄9年 11粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值