难度中等295
给定一个
m x n
二维字符网格board
和一个字符串单词word
。如果word
存在于网格中,返回true
;否则,返回false
。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
例如,在下面的 3×4 的矩阵中包含单词 "ABCCED"(单词中的字母已标出)。
示例 1:
输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED" 输出:true示例 2:
输入:board = [["a","b"],["c","d"]], word = "abcd" 输出:false
class Solution {
public boolean exist(char[][] board, String word) {
char[] array=word.toCharArray();
for(int i=0;i<board.length;i++){
for(int j=0;j<board[0].length;j++){
if(board[i][j]==array[0]){
if(dfs(board,i,j,array,0))return true;
}
}
}
return false;
}
public boolean dfs(char[][] board,int i,int j,char[] word,int cur){
if(i<0||i>=board.length||j<0||j>=board[0].length||board[i][j]!=word[cur])return false;
if(cur==word.length-1)return true;
board[i][j]='/';//标记已访问字符
boolean ans=dfs(board,i-1,j,word,cur+1)||
dfs(board,i,j-1,word,cur+1)||
dfs(board,i+1,j,word,cur+1)||
dfs(board,i,j+1,word,cur+1);
board[i][j]=word[cur];//回溯
return ans;
}
}