Java 求解单词搜索
Posted 南淮北安
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 求解单词搜索相关的知识,希望对你有一定的参考价值。
一、题目
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
二、代码
采用回溯的思想,当第一个字符匹配时,开始对其进行递归判断
同时需要一个标志 数组记录当前字符是否被访问过,防止重复访问
每个字符都可以对其上下左右进行操作,为了操作方便,引入控制数组 directions
class Solution
//控制左右移动
private int[][] directions = 1, 0, 0, 1, -1, 0, 0, -1;
public boolean exist(char[][] board, String word)
//控制不重复访问
boolean[][] flag = 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 (board[i][j] == word.charAt(0) && dfs(board, word, 0, i, j, flag))
return true;
return false;
public boolean dfs(char[][] board, String word, int index, int i, int j, boolean[][] flag)
//匹配成功
if (index == word.length())
return true;
//排除不满足条件的情况
if (i < 0 || i >= board.length || j < 0 || j >= board[0].length)
return false;
//如果当前位满足匹配,则对其递归继续判断
if (board[i][j] == word.charAt(index) && !flag[i][j])
flag[i][j] = true;
//判断四种情况
for (int[] dir : directions)
//只要有一种情况符合即可
if (dfs(board, word, index + 1, i + dir[0], j + dir[1], flag))
return true;
flag[i][j] = false;
return false;
以上是关于Java 求解单词搜索的主要内容,如果未能解决你的问题,请参考以下文章