目录
描述
给定一个 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[] ch = word.toCharArray();
int m = board.length;
int n = board[0].length;
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
if(dfs(board, ch, i, j, 0)){
return true;
}
}
}
return false;
}
public boolean dfs(char[][] board, char[] word, int a, int b, int num){
if(a > board.length-1 || a < 0 ||b > board[0].length-1 || b < 0 || board[a][b] != word[num]){
return false;
}
if(num == word.length-1) return true;
board[a][b] = ' ';
boolean res = dfs(board, word, a+1, b, num+1)||
dfs(board, word, a, b+1, num+1)||
dfs(board, word, a-1, b, num+1)||
dfs(board, word, a, b-1, num+1);
board[a][b] = word[num];
return res;
}
}