Leetcode 79 单词搜索
此题运用dfs深搜+回溯算法
class Solution {
public boolean exist(char[][] board, String word) {
int row=board.length,col=board[0].length;
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
//找到第一个字符相等
if(word.charAt(0)==board[i][j])){
if(check(board,word,i,j,0) return true;
}
}
}
return false;
}
public boolean check(char [][] board,String word,int i,int j,int k){
//单词检验到末尾,说明成功
if(k==word.length()) return true;
//检验越界,失败
if(i<0||j<0||i>=board.length||j>=board[0].length) return false;
//字母不匹配,失败
if(word.charAt(k)!=board[i][j]) return false;
//当前字母匹配,设置临时变量保存
char temp=board[i][j];
//去掉当前字符
board[i][j]='0';
//向上检验
if(check(board,word,i-1,j,k+1)) return true;
//向下检验
if(check(board,word,i+1,j,k+1)) return true;
//向左检验
if(check(board,word,i,j-1,k+1)) return true;
//向右检验
if(check(board,word,i,j+1,k+1)) return true;
//都失败,还原当前字符
board[i][j]=temp;
return false;
}
}