给定一个二维网格和一个单词,找出该单词是否存在于网格中。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

示例:

board =
[
  ['A','B','C','E'],
  ['S','F','C','S'],
  ['A','D','E','E']
]

给定 word = "ABCCED", 返回 true.
给定 word = "SEE", 返回 true.
给定 word = "ABCB", 返回 false.

思路:搜索回溯基本上是经典模板题了。

class Solution {private boolean[][] marked;//        x-1,y// x,y-1  x,y    x,y+1//        x+1,yprivate int[][] direction = {{-1, 0}, {0, -1}, {0, 1}, {1, 0}};// 盘面上有多少行private int m;// 盘面上有多少列private int n;private String word;private char[][] board;public boolean exist(char[][] board, String word) {m = board.length;if (m == 0)return false;n = board[0].length;marked = new boolean[m][n];this.word = word;this.board = board;for (int i = 0; i < m; i++)for (int j = 0; j < n; j++)if (dfs(i, j, 0))return true;return false;}private boolean dfs(int i, int j, int start) {if (start == word.length() - 1) {return board[i][j] == word.charAt(start);}if (board[i][j] == word.charAt(start)) {marked[i][j] = true;for (int k = 0; k < 4; k++) {int newX = i + direction[k][0];int newY = j + direction[k][1];if (newX >= 0 && newX < m && newY >= 0 && newY < n && !marked[newX][newY]) {if (dfs(newX, newY, start + 1)) {return true;}}}marked[i][j] = false;}return false;}
}

leetcode79. 单词搜索 网格地图搜索+回溯经典写法啦相关推荐

  1. Java实现搜索回溯经典题目

    文章目录 前言 搜索框架 经典问题 前言 搜索与回溯是计算机解题中常用的算法,很多问题无法根据某种确定的计算法则来求解,可以利用搜索与回溯的技术求解.回溯是搜索算法中的一种控制策略.它的基本思想是:为 ...

  2. Leetcode 79. 单词搜索(迷宫回溯)

    给定一个 m x n 二维字符网格 board 和一个字符串单词 word .如果 word 存在于网格中,返回 true :否则,返回 false . 单词必须按照字母顺序,通过相邻的单元格内的字母 ...

  3. DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总

    DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...

  4. (六)从零开始学人工智能-搜索:对抗搜索

    对抗搜索 文章目录 对抗搜索 1 为什么要学习对抗搜索? 2 什么是对抗搜索? 3 对抗搜索算法 3.1 极小极大值算法 3.1.1 分硬币游戏 3.1.2 最优路径示例 3.2 α-β剪枝 3.3 ...

  5. networkx 有向图强连通_leetcode刷题(四):搜索(深度优先搜索,广度优先搜索)拓扑排序,强连通分量...

    在开始今天的话题之前,我们先了解一个概念,什么是图的遍历? 图的遍历就是从图中某一点出发访遍图中其余剩余定点,且每个顶点仅被访问一次,这个过程叫做图的遍历. 图的遍历主要被分为深度优先遍历和广度优先遍 ...

  6. 分布式搜索elasticsearch搜索功能【进阶】

    elasticsearch搜索功能 分布式搜索elasticsearch搜索功能 1.DSL查询文档 1.1 DSL查询分类 1.2 全文检索查询 1.3 精准查询 1.4 地理坐标查询 1.5 组合 ...

  7. 深度优先搜索 广度优先搜索理解

    深度优先搜索广度优先搜索 1. 什么是 "搜索" 算法 我们知道,算法都是作用于某种具体的数据结构上的,而深度优先搜索算法和广度优先搜索算法就是作用于图这种数据结构的. 图上的搜索 ...

  8. github issue 搜索_GitHub 搜索 - 如何精准搜索的神仙技巧

    大家好,我是你们的 前端章鱼猫,一个不喜欢喵.又不喜欢吃鱼的超级猫 ~ 今天给大家带来的是 在 GitHub 上如何精准搜索的神仙技巧. [前端GitHub:https://github.com/bi ...

  9. Beam Search(集束搜索/束搜索)

    Beam Search(集束搜索/束搜索) 找遍百度也没有找到关于Beam Search的详细解释,只有一些比较泛泛的讲解,于是有了这篇博文. 首先给出wiki地址:http://en.wikiped ...

最新文章

  1. virtualenv 安装与使用linux下(记录一下)
  2. Spring学习6之自动装配Bean02
  3. latex插入表格_如何将word表格变成LaTeX代码?
  4. Java内存溢出[转]和mysql配置文件简介[原创]
  5. java利用正则截取字符串中的数字
  6. JavaScript 专题之函数柯里化
  7. 2017.4.26 组合数问题 思考记录
  8. jquery 2.0.3代码结构
  9. ubuntu 環境下 bochs 的安裝
  10. 基于Python的优化函数可视化
  11. 吃鸡 反作弊服务器未运行,绝地求生反作弊服务(BE)修复工具
  12. 怎样测试通达信软件,如何测试通达信指标成功率?
  13. 区块链技术视频网站EthCast.com上线
  14. 希尔密码(原理+代码)
  15. 2016美国计算机研究生,2016年美国计算机工程专业研究生排名(转载)
  16. Android 多张2K,4k图片加载压缩的详解
  17. VNC Connect远程工具使用-使用体验极高
  18. 自然数因式分解最小和
  19. 客户端与服务器的数据传输
  20. Verilog HDL

热门文章

  1. sqlite3_exec
  2. ubuntu 修改用户名和计算机名称
  3. ffmpeg 新老接口问题及对照集锦
  4. SIP 中的Dialog,call,session 和 transaction .
  5. linux中权限的名词解释,Linux的基本权限和特殊权限
  6. k近邻算法_K近邻(knn)算法是如何完成分类的?
  7. django批量修改table_django-formset实现数据表的批量操作
  8. 【转】MySQL日期函数与日期转换格式化函数大全
  9. ASP.NET Core管道深度剖析(4):管道是如何建立起来的?
  10. 任务调度开源框架Quartz动态添加、修改和删除定时任务