单词搜索
leetcode第79题(中等)
原链接:https://leetcode-cn.com/problems/word-search/
问题描述
给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
示例
board =
[
['A','B','C','E'],
['S','F','C','S'],
['A','D','E','E']
]
给定 word = "ABCCED", 返回 true
给定 word = "SEE", 返回 true
给定 word = "ABCB", 返回 false
解题思路
算法:深度优先搜索,回溯,递归
1.遍历该网格的所有节点
2.每遍历一个节点,就从该节点开始,遍历与他相邻的上下左右四个节点,如果遍历到第n个节点并满足第n个节点与word[n]的值对应则继续递归遍历该节点的相邻节点。直到word的所有值都相同返回true。如果不满足第n个节点与word[n]的值对应则回溯上一个节点继续遍历其他相邻。
代码(java)
class Solution {
public boolean exist(char[][] board, String word) {
return has(board,word);
}
public static boolean has(char[][] board, String word) {
c=word.toCharArray();
height=board.length;
width=board[0].length;
boards=board;
index=new boolean[height][width];
for(int i=0;i<board.length;i++){
for (int j=0;j<board[i].length;j++){
if(dfs(i,j,0)){
return true;
}
}
}
return false;
}
public static char[][] boards;
public static boolean[][] index;
public static char[] c;
public static int width;
public static int height;
//方位增量
public static int[][] local={{0,-1},{-1,0},{0,1},{1,0}};
public static boolean dfs(int i,int j,int def){
if(c[def]==boards[i][j]){
if((def+1)==c.length){
return true;
}
for(int k=0;k<4;k++){
int i0=i+local[k][0];
int j1=j+local[k][1];
if(i0>=0&&i0<height&&j1>=0&&j1<width&&!index[i0][j1]){
index[i][j]=true;
if(dfs(i0,j1,def+1)){
index[i][j]=false;
return true;
}
index[i][j]=false;
}
}
}else{
return false;
}
return false;
}
}
猜你喜欢
blog
lucene全文检索(搜索)
框架
975
lucene全文检索依赖jardependencygroupIdorg.apache.lucene/groupIdartifactIdlucene-highlighter
ofc
vue搜索过滤和排序
weblog
2680
vue搜索过滤和排序!DOCTYPEhtmlhtml head metacharset="UTF-8" title/title scriptsrc="js/vue.min.js"/script
weblog
5842
a*搜索算法动态演示分析请参考http://photo.jiajiajia.club/item/a-star.html什么是a*搜索算法A*搜寻算法,俗称A星算法,作为启发式搜索算法中的一种,这是一
weblog
6171
前言了解a*搜索算法的原理请参考:http://www.jiajiajia.club/official/weblog/32a*搜索算法动态演示分析,及代码,请参考:http
数据结构与算法
2553
上一篇:广度优先搜索算法(bfs、广搜)java实现-数据结构和算法用邻接矩阵表示图的定点之间的关系如下图数据结构则用邻接矩阵表示为: privatestaticintmap
blog
全文检索笔记
工具
1679
文档,通过分词组件进行分词,获得词元(token)2.通过语言处理组件,2.1进行大写转小写,2.2复数变单数,2.3过去式,将来式转换为现在式,获得词(Term)3.获取Term3.1获取Term词典
数据结构与算法
2353
广度优先搜索算法(dfs、深搜)java实现-数据结构和算法用邻接矩阵表示图的定点之间的关系如下图的数据结构:则用邻接矩阵表示为: privatestaticintmap[][]={ {0,3,6
ofc
二叉搜索树中第k小的元素
official
972
述给定一个二叉搜索树的根节点root,和一个整数k,请你设计一个算法查找其中第k个最小元素(从1开始计数)。示例1输入:root=[3,1,4,null,2],k=1
输出:1示例2输入:root=[5
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。