| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 力扣面试题08.02.:迷路的机器人(可回溯、可动态规划) -> 正文阅读 |
|
[数据结构与算法]力扣面试题08.02.:迷路的机器人(可回溯、可动态规划) |
一、题目内容? ? ? ? ?二、题目分析? ? ? ? 机器人从左上角开始运动,每次只可以向右或者向下运动,不可以经过障碍物,到达右下角为成功。 ? ? ? ? 那我们从(0,0)点开始,分别向右向下运动,如果运动的坐标超出的边界或者碰到障碍物或者坐标被访问过,就返回,如果是正常可访问的坐标,就将它放到数组中去,并且给它标记为已访问。 ? ? ? ? 接下来我们需要判断,当前访问的点是否是右下角的点,如果是,就结束一切操作,否则继续向下个坐标进发。
? ? ? ? 这部分是未经优化的代码,可以看到我用了大量的额外空间去标记它的访问情况,但是其实访问过的点可以直接将它设置为1,也就是看做障碍物,这样也可以达到不重复访问的效果。 ? ? ? ? 还有一点就是,我重复的使用了诸如obstacleGrid.length之类复杂的语句,可以将它们直接定义为类的属性,简化代码。 ? ? ? ? ?另外还有一点需要提一下,在下面这句判断中
? ? ?obstacleGrid[i][j]==1这句一定要写在最后面,因为前面的语句只要有一个正确,就会直接进入底下的return,不会执行 ?obstacleGrid[i][j]==1。但是如果将它放在第一个,可能i,j下标越界而错误。 ????????? 最后就是为什么最后要写三个if语句,而不是将这三个语句写到一个if里。因为第一个
?执行完之后,可能已经访问到最后一个点了,flag为true,可以直接退出了,但是如果写在一个if里,那么上面的程序执行完之后,还需要继续执行,显然有问题。 底下是简化后的代码:
???????? ? ? ? ? 这个题目我已经全都在原数组操作了,但是内存消耗还是很大,?可以试试用动态规划做,先判断起点到终点是否可达,再倒序求路径。
???????? ?三、感言? ? ? ? 动态规划几天没写,怎么手生了呢? ctmd.... |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 7:17:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |