程序员面试金典 - 面试题 08.02. 迷路的机器人(DFS/动态规划)

文章目录

    • 1. 题目
    • 2. 解题
      • 2.1 DFS
      • 2.2 动态规划

1. 题目

设想有个机器人坐在一个网格的左上角,网格 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]]
解释: 
输入中标粗的位置即为输出表示的路径,即
00列(左上角) -> 01-> 02-> 12-> 22列(右下角)

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/robot-in-a-grid-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 DFS

一开始 34/36个通过测试

  • 修改,把visited过的地方回溯的时候别改回去,因为不通,所以后面也别走了
class Solution {vector<vector<int>> path;vector<vector<int>> ans;int m, n;bool found = false;vector<vector<int>> dir = {{1,0},{0,1}};
public:vector<vector<int>> pathWithObstacles(vector<vector<int>>& grid) {if(grid.empty() || grid[0].empty())return {};m = grid.size(), n = grid[0].size();if(grid[0][0]==1 || grid[m-1][n-1]==1)return {};vector<vector<bool>> visited(m, vector<bool>(n,false));dfs(grid,0,0,visited);return ans;}void dfs(vector<vector<int>>& grid, int i, int j, vector<vector<bool>> & visited){if(found)return;if(i == m-1 && j == n-1){path.push_back({i,j});ans = path;found = true;return;}visited[i][j] = true;path.push_back({i,j});int x, y;for(int k = 0; k < 2; ++k){x = i + dir[k][0];y = j + dir[k][1];if(x>=0 && x<m && y>=0 && y<n && grid[x][y]==0 && !visited[x][y])dfs(grid,x,y,visited);}// visited[i][j] = false;//不注释会超时path.pop_back();}
};

28 ms 10.4 MB

2.2 动态规划

  • dp[i][j] 表示机器人能否到达该处
  • 能到达终点,从终点肯定能随便走一条路回去
class Solution {
public:vector<vector<int>> pathWithObstacles(vector<vector<int>>& grid) {if(grid.empty() || grid[0].empty())return {};int m = grid.size(), n = grid[0].size(), i, j, k;if(grid[0][0]==1 || grid[m-1][n-1]==1)return {};vector<vector<bool>> dp(m,vector<bool>(n,false));//求每个位置是否可以到达for(i = 0; i < m; ++i){	//初始化第一列if(grid[i][0]==1)break;//障碍物elsedp[i][0] = true;}for(j = 0; j < n; ++j){	//初始化第一行if(grid[0][j]==1)break;//障碍物elsedp[0][j] = true;}for(i = 1; i < m; i++){for(j = 1; j < n; j++){if(grid[i][j]==0)//不是障碍物dp[i][j] = (dp[i-1][j] || dp[i][j-1]);}}if(dp[m-1][n-1]==false)//到不了终点return {};vector<vector<int>> ans(m+n-1);k = m+n-2, i = m-1, j = n-1;while(i!=0 || j!=0){ans[k--] = {i,j};if(i-1>=0 && dp[i-1][j])i--;else if(j-1>=0 && dp[i][j-1])j--;}ans[0] = {0,0};return ans;}
};

20 ms 8.9 MB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python数据分析开发环境_在MAC上搭建python数据分析开发环境

最近工作转型到数据开发领域&#xff0c;想在本地搭建一个数据开发环境。自己有三年python开发经验&#xff0c;马上想到使用numpy、scipy、sklearn、pandas搭建一套数据开发环境。 ubuntu的环境&#xff0c;百度中文章比较多&#xff0c;搭建起来非常顺利。MAC环境的资料比较少…

方向盘开极品飞车9很Hapyy

一直以来&#xff0c;总是找不到一款自己心爱的游戏&#xff0c;呵呵&#xff0c;弄到个方向盘&#xff0c;开极品很HI喔。。。 虽然现在没空去玩&#xff0c;只能把方向盘放在电脑的左边&#xff0c;没事的时候只能看看了&#xff0c;不过有个期盼可以玩一把的游戏也很不错呀&…

负样本为王,百篇论文概览负采样方法的前世今生

文&#xff5c;徐澜玲源&#xff5c;RUC AI Box目录1. 研究背景1.1 什么是负采样&#xff1f;1.2 为什么需要负采样&#xff1f;1.3 为什么需要高质量的负采样&#xff1f;2. 负采样方法分类梳理2.1 静态负采样2.2 强负例采样2.3 对抗式负采样2.4 基于图的负采样2.5 引入额外信…

程序员面试金典 - 面试题 17.25. 单词矩阵(Trie树+DFS回溯,hard)

1. 题目 给定一份单词的清单&#xff0c;设计一个算法&#xff0c;创建由字母组成的面积最大的矩形&#xff0c;其中每一行组成一个单词(自左向右)&#xff0c;每一列也组成一个单词(自上而下)。 不要求这些单词在清单里连续出现&#xff0c;但要求所有行等长&#xff0c;所有…

python mysql操作封装库_python封装mysq操作,进行数据库的增删改

python操作mysql进行封装&#xff0c;封装的好处我就不提了&#xff0c;以下是我做项目时的一个封装&#xff0c;大家可以根据实际需要进行自己的一个封装我封装的内容&#xff1a;1.数据库的配置文件2.获取数据配置文件的地址3.连接数据库的操作4.操作mysql的语句5.调用mysql的…

SQL2000数据库中删除“坏表”的方法

SQL2000数据库中删除“坏表”的方法在一些网站或者软件系统中&#xff0c;由于安全或者程序异常等问题&#xff0c;可能会在SQL Server 2000中造成一个异常问题&#xff1a;在企业管理器中打开数据库发现有一些“坏表”&#xff0c;即无法使用&#xff0c;也无法正常删除。其原…

偶然当程序员却拿下图灵奖,超算榜单之父讲述人生开挂经历

文&#xff5c;衡宇 发自 凹非寺源&#xff5c;量子位40年前偶然走上程序员道路的Jack Dongarra&#xff0c;是今年的图灵奖得主。奖项设立机构美国计算机协会&#xff08;ACM&#xff09;表示&#xff0c;Dongarra的算法与软件成果推动了高性能计算&#xff08;HPC&#xff09…

程序员面试金典 - 面试题 16.18. 模式匹配(逻辑题)

1. 题目 你有两个字符串&#xff0c;即pattern和value。 pattern字符串由字母"a"和"b"组成&#xff0c;用于描述字符串中的模式。 例如&#xff0c;字符串"catcatgocatgo"匹配模式"aabab"&#xff08;其中"cat"是"a&q…

拼团小程序源码_拼团软件微信拼团小程序拼团卖水果、让您快速引流

微信作为国内最大的社交平台&#xff0c;已经拥有11亿的用户&#xff0c;成为社交电商最主要的流量平台。从电商商家到线下门店&#xff0c;从品牌商到个体户&#xff0c;大家都想瓜分微信平台的流量。同时&#xff0c;微信也在不断完善小程序在各业务场景中的接口&#xff0c;…

vs2008 USB转COM口发送字符中途出错的问题.

在VS2008中,使用USB转串口发送字符,当拔下设备再插上,串口在使用的途中会抛出错误,用Try..Catch都无法捕获. 在 System.UnauthorizedAccessException 中第一次偶然出现的“System.dll”类型的异常 “Gosun.SMC.SMS.WindowService.exe”(托管): 已加载“C:"Windows"as…

python安装requests库超时_【Python 库】requests 详解超时和重试

网络请求不可避免会遇上请求超时的情况&#xff0c;在 requests 中&#xff0c;如果不设置你的程序可能会永远失去响应。超时又可分为连接超时和读取超时。连接超时连接超时指的是在你的客户端实现到远端机器端口的连接时(对应的是connect())&#xff0c;Request 等待的秒数。i…

IT信息业、金融业从业人员悲歌

在台湾&#xff0c;不论是金融从业人员、IT 软件业、硬件业、电子代工业&#xff0c;工程师、技术人员的工作压力都颇大。要终其一生不断学习、为公司卖命。不同的是&#xff0c;在台湾的电子、光电、晶圆大厂&#xff0c;若你身为电子、电机、硬件、Firmware、Driver 撰码工程…

程序员面试金典 - 面试题 17.26. 稀疏相似度(哈希map)

1. 题目 两个(具有不同单词的)文档的交集(intersection)中元素的个数除以并集(union)中元素的个数&#xff0c;就是这两个文档的相似度。 例如&#xff0c;{1, 5, 3} 和 {1, 7, 2, 3} 的相似度是 0.4&#xff0c;其中&#xff0c;交集的元素有 2 个&#xff0c;并集的元素有 …

i2c通信的详细讲解_【博文连载】SCCB(I2C)初始化时序介绍

在正式开始OV7725视频采集实现之前&#xff0c;Bingo不得不先讲解一下OV7725的寄存器配置接口。OV7725上电会默认输出YUV422格式的视频流&#xff0c;但我们希望传感器能够按照我们预期的模式工作&#xff0c;我们需要配置分辨率&#xff0c;配置内部时钟&#xff0c;配置亮度、…

何可欣(为奥运冠军名字作诗)

何可欣&#xff08;为奥运冠军名字作诗&#xff09;——代腾飞 2008年8月18日 于成都何妹归来喜外望可儿杠上敢称王欣然前往杠上翻摘得皇冠美名扬转载于:https://www.cnblogs.com/daitengfei/archive/2008/08/25/1276011.html

LeetCode 647. 回文子串(DP/中心扩展)

文章目录1. 题目2. 解题2.1 动态规划2.2 中心扩展法1. 题目 给定一个字符串&#xff0c;你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符组成&#xff0c;也会被计为是不同的子串。 示例 1: 输入: "abc…

当我问了ChatGPT 10个程序员最关心的问题,没想到…

源&#xff5c;AfterShip近期 OpenAI 火爆了科技圈。作为一家极客氛围浓厚&#xff0c;60% 都是产研的科技公司&#xff0c;AfterShip 的很多同学也都留意到了这个工具。因此&#xff0c;我们面向工程师征集共创&#xff0c;并筛选出了程序员最关心的十个问题。并将这些问题询问…

ipv6 访问内网_【内网渗透】—— 隐藏通信隧道技术之网络层隧道技术

hidden&#xff1a;是否完全隐藏控制面板&#xff0c;还有很多设置参数&#xff0c;比如也可以设置显示面板&#xff0c;然后设置宽高WIDTH“整数” 和 HIGH“整数”。1. 隐藏通信隧道基础1.1隐藏通信隧道技术概述常用的隧道&#xff1a;网络层&#xff1a;IPv6隧道&#xff0c…

心潮澎湃之胡言乱语

做了很长时间的思想斗争之后决定还是写下这篇文章&#xff0c;从毕业到现在两个月了&#xff0c;明天我将离开了工作两个月的公司&#xff0c;上帝再一次次的考验我然后又再一次次的给我机会&#xff0c;挫折的背后感触更多是我是上帝的宠儿&#xff0c;所以越到挫折时自我陶醉…

LeetCode 1277. 统计全为 1 的正方形子矩阵(DP)

1. 题目 给你一个 m * n 的矩阵&#xff0c;矩阵中的元素不是 0 就是 1&#xff0c;请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数。 示例 1&#xff1a; 输入&#xff1a;matrix [[0,1,1,1],[1,1,1,1],[0,1,1,1] ] 输出&#xff1a;15 解释&#xff1a; 边长为 …