文章目录

  • 题目描述
  • 思路 & 代码
    • 更新版 2.0

题目描述

  • 一眼dfs,走四个方向即可

思路 & 代码

class Solution {boolean[][] visited;boolean found;public boolean exist(char[][] board, String word) {char[] wordArr = word.toCharArray();int m = board.length;int n = board[0].length;visited = new boolean[m][n];// 找到入口,就进行查找for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(wordArr[0] == board[i][j]){visited[i][j] = true;found = find(board, wordArr, i, j, 1);if(found){return found;}visited[i][j] = false;}}}return false;}boolean find(char[][] board, char[] word, int x, int y, int index){if(index == word.length){return true;}// 找四个方向if(x + 1 < board.length && !visited[x + 1][y] && word[index] == board[x + 1][y]){visited[x + 1][y] = true;found = find(board, word, x + 1, y, index + 1);if(found){return found;}visited[x + 1][y] = false;}if(x - 1 >= 0 && !visited[x - 1][y] && word[index] == board[x - 1][y]){visited[x - 1][y] = true;found = find(board, word, x - 1, y, index + 1);if(found){return found;}visited[x - 1][y] = false;}if(y + 1 < board[0].length && !visited[x][y + 1] && word[index] == board[x][y + 1]){visited[x][y + 1] = true;found = find(board, word, x, y + 1, index + 1);if(found){return found;}visited[x][y + 1] = false;}if(y - 1 >= 0 && !visited[x][y - 1] && word[index] == board[x][y - 1]){visited[x][y - 1] = true;found = find(board, word, x, y - 1, index + 1);if(found){return found;}visited[x][y - 1] = false;}return found;}
}

更新版 2.0

  • 卧槽。。之前这么长的代码我怎么受得了T T
class Solution {boolean[][] visited;public boolean exist(char[][] board, String word) {char[] arr = word.toCharArray();visited = new boolean[board.length][board[0].length];for(int i = 0; i < board.length; i++) {for(int j = 0; j < board[0].length; j++) {if(dfs(board, arr, 0, i, j)) {return true;}}}return false;}// 符合当前字符,则进入下一层public boolean dfs(char[][] board, char[] arr, int index, int i, int j) {if(index == arr.length) {return true;}// 越界、不符、已访问if(i == board.length || j == board[0].length || i == -1 || j == -1 ||arr[index] != board[i][j] || visited[i][j]) {return false;}visited[i][j] = true;// 短路运算符||:剪枝boolean res = dfs(board, arr, index + 1, i + 1, j) || dfs(board, arr, index + 1, i - 1, j) ||dfs(board, arr, index + 1, i, j + 1) || dfs(board, arr, index + 1, i, j - 1);visited[i][j] = false;return res;}
}
  • 无注释纯净版
class Solution {boolean[][] visited;public boolean exist(char[][] board, String word) {char[] arr = word.toCharArray();visited = new boolean[board.length][board[0].length];for(int i = 0; i < board.length; i++) {for(int j = 0; j < board[0].length; j++) {if(dfs(board, arr, 0, i, j)) {return true;}}}return false;}public boolean dfs(char[][] board, char[] arr, int index, int i, int j) {if(index == arr.length) {return true;}if(i == board.length || j == board[0].length || i == -1 || j == -1 ||arr[index] != board[i][j] || visited[i][j]) {return false;}visited[i][j] = true;boolean res = dfs(board, arr, index + 1, i + 1, j) || dfs(board, arr, index + 1, i - 1, j) ||dfs(board, arr, index + 1, i, j + 1) || dfs(board, arr, index + 1, i, j - 1);visited[i][j] = false;return res;}
}

【LeetCode笔记】79. 单词搜索 剑指 Offer 12 矩阵中的路径(Java、dfs)相关推荐

  1. 【算法】剑指 Offer 12. 矩阵中的路径

    文章目录 1.概述 2.我的算法 2.1 棋盘 2.1 开始节点 2.2 点没被访问 2.3 点是否在棋盘内 2.4 下一步 2.5 主方法 2.6 核心方法 2.7 测试类 3.leecode1 1 ...

  2. 【附可运行代码】剑指 Offer 12. 矩阵中的路径

    立志用最少的代码做最高效的表达 给定一个 m x n 二维字符网格 board 和一个字符串单词 word .如果 word 存在于网格中,返回 true :否则,返回 false . 单词必须按照字 ...

  3. 剑指 Offer 12. 矩阵中的路径

    这里使用了回溯算法,回溯算法是一种比较特别的DFS,它需要在达到搜索条件后,回溯上一次,继续搜索.普通的DFS适合找路径是否存在的问题,而回溯算法适合解决有几条路径的问题. 这里给出DFS的模板 df ...

  4. 剑指Offer 12—矩阵中的路径

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

  5. 剑指offer——12.矩阵中的路径(不熟)

    题目: 题1:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩 ...

  6. 剑指 Offer(C++版本)系列:剑指 Offer 12 矩阵中的路径

    文章目录 同步GitHub在此

  7. LeetCode-剑指 Offer 12. 矩阵中的路径

    剑指 Offer 12. 矩阵中的路径 思路一:DFS+回溯 DFS 解析: 递归参数: 当前元素在矩阵 board 中的行列索引 i 和 j ,当前目标字符在 word 中的索引 k . 终止条件: ...

  8. 剑指offer之矩阵中的路径

    题目描述: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左.右.上.下移动一格.如果一条路径经过了矩阵的某一格,那么 ...

  9. 剑指offer:矩阵中的路径(递归回溯法DFS类似迷宫)

    1. 题目描述 /*请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经 ...

最新文章

  1. 打造 AI Beings,和微信合作…第七代微软小冰的成长之路
  2. 爷青回!GAN生成的超级马里奥关卡,可以永不通关的那种
  3. python语言特点有哪些-Python是什么?Python有什么特点?
  4. android收费知乎,知乎 Android 端的一次重设计练习
  5. android p wifi一直在扫描_在Android上的每次WiFi扫描之间我应该使用什么时间间隔?...
  6. Linux设备模型:kset, kobj, ktype
  7. 计算机软件自学基础,计算机软件基础一高等教育自学考试试题与答案
  8. 1.3 Zend_Acl (3)
  9. 关于 in与exist , not in与not exist 的区别
  10. c++ 数字后加f_电工电子学 | 数字集成电路
  11. NOR FLASH闪存芯片ID应用之软件保护场景
  12. .arx 与此版本的 AutoCAD 不兼容。
  13. 锐捷linux客户端进路由器,锐捷WLAN无线产品之SSH管理
  14. Java 分页计算公式
  15. 西部数据硬盘不同色彩的含义
  16. ICLR 2021 | 自解释神经网络—Shapley Explanation Networks
  17. 如何使用patch命令打补丁
  18. 10月 区块链领域投融资事件
  19. Delta RPMs disabled because /usr/bin/applydeltarpm not installed
  20. 机房动环监控系统有哪些告警功能,机房动环监控系统是什么?

热门文章

  1. c语言转义字符_C语言啊中的转义符有什么含义?
  2. css线加点的进度,纯CSS实现的交互式进度条(点击带进度填充动画)
  3. c语言中的标准数据类型,C语言中的基本数据类型
  4. Halcon学习笔记:select_points_object_model_3d(3D对象模型阀值分割)
  5. Java加密与解密的艺术~安全协议~模型分析
  6. C++学习之路 | PTA乙级—— 1031 查验身份证 (15 分)(精简)
  7. [转载] --- 数据库基本知识
  8. 统计iOS项目代码行数
  9. mysql 硬负载_软负载均衡和硬负载均衡
  10. PKU 学生的反馈 2009-1