79. 单词搜索
难度:中等
前几天小米笔试的真题来着,但是当时没给二维矩阵
题目描述
解题思路
回溯+剪枝+状态重置
/*
* 79. 单词搜索
* 2020/9/14
* medium
*/
public boolean exist(char[][] board, String word) {
char[] str = 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(board[i][j] == str[0]) {
if(dfsExist(board,str,i,j,m,n,0))
return true;
}
}
}
return false;
}
public boolean dfsExist(char[][] board,char[] str,int i,int j,int m,int n,int cur) {
if(cur == str.length) {
return true;
}
if(i < 0 || i >= m || j < 0 || j >= n || board[i][j] == '#' || board[i][j] != str[cur]) {
return false;
}
char temp = board[i][j];
board[i][j] = '#';
boolean re = dfsExist(board,str,i+1,j,m,n,cur+1)
|| dfsExist(board,str,i-1,j,m,n,cur+1)
|| dfsExist(board,str,i,j+1,m,n,cur+1)
|| dfsExist(board,str,i,j-1,m,n,cur+1);
board[i][j] = temp;
return re;
}