Leetcode 79. 单词搜索(迷宫回溯)
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCCED”
输出:true
输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “SEE”
输出:true
输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCB”
输出:false
【思路】
常规的迷宫回溯搜索问题。
回溯时只需要注意几个点:
1、每次试探是否在矩阵范围内,不能超出地图范围
2、是否能够保证“不走回头路”。需要用vis数组标记走过的点。
3、迷宫的起点取决于word字符串的首字符。
4、想好递归的终止条件,即正好是word的最后一个字符且与迷宫上对应的字符相等。
【代码】:
/*** @param {character[][]} board* @param {string} word* @return {boolean}*///k表示当前是wordArr里的第几个
var dfs = function(x, y,board, wordArr, k, vis){var m = board.length;var n = board[0].length;if(x >= m || y >= n || x < 0 || n < 0) return false;if(vis[x][y] == 1) return false;if(board[x][y] != wordArr[k]) return false;if(board[x][y] == wordArr[k] && k == wordArr.length - 1) return true;// 四个方向搜索var isfind = false;//走迷宫不要忽略这一步,要确保不走回头路vis[x][y] = 1;isfind = dfs(x + 1, y, board, wordArr, k + 1, vis) || dfs(x - 1, y, board, wordArr, k + 1, vis) || dfs(x, y + 1, board, wordArr, k + 1, vis) || dfs(x, y - 1, board, wordArr, k + 1, vis);vis[x][y] = 0;return isfind;
}var exist = function(board, word) {var wordArr = word.split("");var first = wordArr[0];var m = board.length;var n = board[0].length;var isfind = false;var vis = Array(m).fill().map(() => Array(n).fill(0));console.log(vis) for(let i = 0;i < m && !isfind;i++){for(let j = 0;j < n && !isfind;j++){if(board[i][j] == first){isfind = dfs(i, j, board, wordArr, 0, vis);}}}return isfind;
};
Leetcode 79. 单词搜索(迷宫回溯)相关推荐
- LeetCode 79. 单词搜索(回溯DFS)
1. 题目 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格.同一个 ...
- Leetcode 79. 单词搜索
Leetcode 79. 单词搜索 1.问题分析 2.问题解决 3.总结 1.问题分析 题目链接:https://leetcode-cn.com/problems/word-search/ 本质上 ...
- LeetCode 79 单词搜索
LeetCode 79 单词搜索 题目链接 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水 ...
- Leetcode 79.单词搜索
Time: 20190901 Type: Medium 题目描述 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻&q ...
- LeetCode 79. 单词搜索【c++/java详细题解】
目录 1.题目 2.思路 3.c++代码 4.java代码 1.题目 给定一个 m x n 二维字符网格 board和一个字符串单词 word .如果 word 存在于网格中,返回 true :否则, ...
- LeetCode 79. 单词搜索 | Python
文章目录 79. 单词搜索 题目 解题思路 代码实现 实现结果 总结 79. 单词搜索 题目来源:https://leetcode-cn.com/problems/word-search 题目 给定一 ...
- java实现英文文件单词搜索系统_Java实现 LeetCode 79 单词搜索
79. 单词搜索 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格. ...
- Java实现 LeetCode 79 单词搜索
79. 单词搜索 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格. ...
- leetcode 79. 单词搜索【类似迷宫回溯】
执行用时 : 24 ms, 在Word Search的C++提交中击败了99.00% 的用户 内存消耗 : 11 MB, 在Word Search的C++提交中击败了78.26% 的用户 类似于迷宫回 ...
最新文章
- 西数加密linux,Symantec PGP Desktop pgpwded.sys内核驱动任意代码执行漏洞
- 反思响应json字符串的优化写法
- write up:web 实战2-注入--sql注入(手工注入详细版)
- 倒计时3天:3D音带你起飞
- 没有 root 权限如何使用 pip?How to install python modules without root access?
- 宿迁学计算机的学校,宿迁计算机学校
- ZooKeeper:协调分布式系统入门指南
- 3个提升Python运行速度的方法,很实用
- (三)SpringMVC实现
- php 实现两变量值对换,PHP互换两个变量值的方法(不用第三变量)
- pytorch GPU加速运算
- OA系统四级模块编写测试用例(角色模块)
- 射影几何----蝴蝶定理的证明
- 数据库——SQL语言建立供应商表S,零件表P,工程表J,供应表SPJ
- 长春理工大学成人高考大专报名条件
- Drone 自定义 UI
- 存储那些事儿(三):OpenStack的块存储Cinder与商业存储的融合
- 小程序中的axio——flyio的使用
- java下划线_转驼峰,小写转大写(亲写,亲测)
- 用 Python 快速获取基金持仓增减情况 | 更新版
热门文章
- 1.MySQL增删改查(初阶)
- g2o学习记录(4)cmake-gui再次编译g2o及不太完美的处理cs.h错误[20190323已找到完美解决方案](非干货纯记录,可不看)
- js获取当前时间的前几天时间
- Incorrect string value '\xF0\xA0\x9D\xB9\xE5\x82...' for column 'CONTENT' at row 1
- signature=5a522a8356f9906b0b775bdada02a4c6,合肥2016年4月29日至2016年5月12日交通违章查询...
- Peekaboo——代码规范、冲刺任务与计划
- MH算法拟合标准柯西分布
- 如何改变图片尺寸?怎么调整图片大小?
- 深扒联易融招股书:毛利率高、研发占比低,近三年合计亏约30亿
- 模板方法模式--我们一起下饺子