给定一个 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. 单词搜索(迷宫回溯)相关推荐

  1. LeetCode 79. 单词搜索(回溯DFS)

    1. 题目 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格.同一个 ...

  2. Leetcode 79. 单词搜索

    Leetcode 79. 单词搜索 1.问题分析 2.问题解决 3.总结 1.问题分析 题目链接:https://leetcode-cn.com/problems/word-search/   本质上 ...

  3. LeetCode 79 单词搜索

    LeetCode 79 单词搜索 题目链接 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水 ...

  4. Leetcode 79.单词搜索

    Time: 20190901 Type: Medium 题目描述 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻&q ...

  5. LeetCode 79. 单词搜索【c++/java详细题解】

    目录 1.题目 2.思路 3.c++代码 4.java代码 1.题目 给定一个 m x n 二维字符网格 board和一个字符串单词 word .如果 word 存在于网格中,返回 true :否则, ...

  6. LeetCode 79. 单词搜索 | Python

    文章目录 79. 单词搜索 题目 解题思路 代码实现 实现结果 总结 79. 单词搜索 题目来源:https://leetcode-cn.com/problems/word-search 题目 给定一 ...

  7. java实现英文文件单词搜索系统_Java实现 LeetCode 79 单词搜索

    79. 单词搜索 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格. ...

  8. Java实现 LeetCode 79 单词搜索

    79. 单词搜索 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格. ...

  9. leetcode 79. 单词搜索【类似迷宫回溯】

    执行用时 : 24 ms, 在Word Search的C++提交中击败了99.00% 的用户 内存消耗 : 11 MB, 在Word Search的C++提交中击败了78.26% 的用户 类似于迷宫回 ...

最新文章

  1. 西数加密linux,Symantec PGP Desktop pgpwded.sys内核驱动任意代码执行漏洞
  2. 反思响应json字符串的优化写法
  3. write up:web 实战2-注入--sql注入(手工注入详细版)
  4. 倒计时3天:3D音带你起飞
  5. 没有 root 权限如何使用 pip?How to install python modules without root access?
  6. 宿迁学计算机的学校,宿迁计算机学校
  7. ZooKeeper:协调分布式系统入门指南
  8. 3个提升Python运行速度的方法,很实用
  9. (三)SpringMVC实现
  10. php 实现两变量值对换,PHP互换两个变量值的方法(不用第三变量)
  11. pytorch GPU加速运算
  12. OA系统四级模块编写测试用例(角色模块)
  13. 射影几何----蝴蝶定理的证明
  14. 数据库——SQL语言建立供应商表S,零件表P,工程表J,供应表SPJ
  15. 长春理工大学成人高考大专报名条件
  16. Drone 自定义 UI
  17. 存储那些事儿(三):OpenStack的块存储Cinder与商业存储的融合
  18. 小程序中的axio——flyio的使用
  19. java下划线_转驼峰,小写转大写(亲写,亲测)
  20. 用 Python 快速获取基金持仓增减情况 | 更新版

热门文章

  1. 1.MySQL增删改查(初阶)
  2. g2o学习记录(4)cmake-gui再次编译g2o及不太完美的处理cs.h错误[20190323已找到完美解决方案](非干货纯记录,可不看)
  3. js获取当前时间的前几天时间
  4. Incorrect string value '\xF0\xA0\x9D\xB9\xE5\x82...' for column 'CONTENT' at row 1
  5. signature=5a522a8356f9906b0b775bdada02a4c6,合肥2016年4月29日至2016年5月12日交通违章查询...
  6. Peekaboo——代码规范、冲刺任务与计划
  7. MH算法拟合标准柯西分布
  8. 如何改变图片尺寸?怎么调整图片大小?
  9. 深扒联易融招股书:毛利率高、研发占比低,近三年合计亏约30亿
  10. 模板方法模式--我们一起下饺子