【1】【leetcode-79】 单词搜索
(典型dfs,知道思想写错)
给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
示例:
- board =
- [
- ['A','B','C','E'],
- ['S','F','C','S'],
- ['A','D','E','E']
- ]
- 给定 word = "ABCCED", 返回 true.
- 给定 word = "SEE", 返回 true.
- 给定 word = "ABCB", 返回 false.
- public class Solution {
- public boolean exist(char[][] board, String word) {
- int m = board.length;
- int n = board[0].length;
- boolean[][] visited = new boolean[m][n];
- for(int i = 0; i < m; i++){
- for(int j = 0; j < n; j++){
- if(dfs(board, word, visited, i, j, m, n, 0))
- return true;
- }
- }
- return false;
- }
- private boolean dfs(char[][] board, String word, boolean[][] visited, int i, int j, int m, int n, int count){
- if(count == word.length()){
- return true;
- }
- if(i < 0 || i >= m || j < 0 || j >= n || board[i][j] != word.charAt(count))
- return false;
- if(visited[i][j])
- return false;
- visited[i][j] = true;
- boolean res = dfs(board, word, visited, i - 1, j, m, n, count + 1) ||
- dfs(board, word, visited, i + 1, j, m, n, count + 1) ||
- dfs(board, word, visited, i, j - 1, m, n, count + 1)||
- dfs(board, word, visited, i, j + 1, m, n, count + 1);
- visited[i][j] = false;
- return res;
- }
- }
- class Solution {
- public boolean exist(char[][] board, String word) {
- // 标志位,初始为false
- int row = board.length, col = board[0].length;
- boolean[][] flag = new boolean[row][col];
- for(int r = 0; r < row; r++){
- for(int c = 0; c < col; c++){
- if(isSolution(board,r,c,flag,word,0))
- return true;
- }
- }
- return false;
- }
- public boolean isSolution(char[][] board,int r, int c, boolean[][] flag, String word, int start){
- // 递归出口
- if(r<0||r>=board.length||c<0||c>=board[0].length||board[r][c]!=word.charAt(start)||flag[r][c]==true)
- return false;
- // 匹配成功
- if(start==word.length()-1)
- return true;
- // 标记已走过的位置
- flag[r][c] = true;
- // 上下左右递归查找
- if(isSolution(board,r-1,c,flag,word,start+1)
- ||isSolution(board,r+1,c,flag,word,start+1)
- ||isSolution(board,r,c-1,flag,word,start+1)
- ||isSolution(board,r,c+1,flag,word,start+1)){
- return true;
- }
- // 没匹配到则把标记为改回去!!!
- flag[r][c] = false;
- return false;
- }
- }
【1】【leetcode-79】 单词搜索的更多相关文章
- Java实现 LeetCode 79 单词搜索
79. 单词搜索 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格. ...
- Leetcode 79.单词搜索
单词搜索 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格.同一个单 ...
- LeetCode 79.单词搜索 - JavaScript
题目描述:给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格.同一个单 ...
- LeetCode——79. 单词搜索
给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格.同一个单元格内的字 ...
- [LeetCode] 79. 单词搜索(DFS,回溯)
题目 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格.同一个单元格 ...
- LeetCode 79. 单词搜索(Word Search)
题目描述 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格.同一个单元格内的字母不允许被 ...
- Leetcode之回溯法专题-79. 单词搜索(Word Search)
Leetcode之回溯法专题-79. 单词搜索(Word Search) 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元 ...
- [LeetCode题解]79. 单词搜索
题目描述 题目:79. 单词搜索 解题思路 遍历 首先找重复性,题目说给定单词是否存在于二维数组中,可以简化为从 (x, y) 走 n 步(n 表示单词长度),查看给定单词是否存在.然后再遍历二维数组 ...
- [leetcode] 212. 单词搜索 II(Java)
212. 单词搜索 II 这leetcode的评判机绝对有问题!!同样的代码提交,有时却超时!害得我至少浪费两个小时来寻找更优的答案= =,其实第一次写完的代码就可以过了,靠!!!第207位做出来的 ...
- Leetcode 212.单词搜索II
单词搜索II 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻&q ...
随机推荐
- 手机Web 开发中图片img 如何等比例缩放
如果图片本身没有设置 width.height属性的话,只需要修改 max-width:100%; 就可以了 如果图片本身设置了 width.height属性的话,需要同时修改width 和heigh ...
- 七牛云 qshell 使用
七牛云 qshell 控制台工具上传 命令:qshell fput another1 demo.txt /users/tianyang/demo.txt ======================= ...
- ecplise An incompatible version [1.2.14] of the APR based Apache Tomcat Native library is installed, while T
原文:https://www.cnblogs.com/levy-home/p/5676322.html 到http://archive.apache.org/dist/tomcat/tomcat-co ...
- MT【243】球内接四面体体积
已知半径为2的球面上有$A,B,C,D$四点,若$AB=CD=2$,则四面体$ABCD$的体积最大为____ 解答:利用$V=\dfrac{1}{6}|AB||CD|d<AB,CD>sin ...
- nfs的配置文件/etc/exports
/etc/exports 文件格式 <输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)] a. 输出目录:输出目录是指NFS系统中 ...
- linux下对clamav杀毒软件的安装和配置
下载安装 首先安装zlib库: # yum install zlib zlib-devel //安装可忽略 下载安装clamav源码包 clamav管网:http://www.clamav.net/d ...
- android sqlite boolean 类型
sql语句中 boolean (bit)类型的字段 ,insert 数据的时候 , 有null ,0 (false),1(true) 三个数可以选择. 例如: insert into pos valu ...
- poj 2356 (抽屉原理)
题目链接:http://poj.org/problem?id=2356 题目大意:给你n个数,要你从n个数选出若干个数,要求这若干个数的和是n的倍数,输出选择数的个数,以及相应的数. 解题思路: 以下 ...
- InnoDB,5项最佳实践,知其所以然?
InnoDB,5项最佳实践,知其所以然? 原创: 58沈剑 架构师之路 昨天 缓存讲了一个月<缓存架构,一篇足够>.今天,开始写数据库. 第一篇,说说MySQL两个最常用的存储引擎,MyI ...
- react-native中的state
我们使用两种数据来控制一个组件:props和state.props是在父组件中指定, 而且一经指定,在被指定的组件的生命周期中则不再改变. 对于需要改变的数据,我们需要使用state. 假如我们需要制 ...