这道题其实和迷宫问题很相似,都是使用回溯法。
关键:递归方法里判断每个位置是否有
1.在数组范围内的
2.没被访问的
3.和字符串中相同的字符
想清楚以上三个条件后相信不难写出代码,有不懂的可以留言或私聊我
class Solution {
private boolean memo[][];
private int d[][]={{-1,0},{0,1},{1,0},{0,-1}};
public boolean exist(char[][] board, String word) {
if (board == null || word == null || word.length() < 1)
return false;
memo=new boolean[board.length][board[0].length];
boolean res=false;
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[0].length; j++) {
if(exist1(board, word, i, j,0))
return true;
}
}
return false;
}
private boolean exist1(char[][] board, String word, int row, int col,int index) {
if (index==word.length()-1)
return board[row][col]==word.charAt(index);
if(board[row][col]==word.charAt(index)){
memo[row][col]=true;
for(int i=0;i<4;i++){
int nrow=row+d[i][0];
int ncol=col+d[i][1];
if(isArea(nrow,ncol,board)&&!memo[nrow][ncol]&&exist1(board, word, nrow, ncol,index+1)){
return true;
}
}
memo[row][col]=false;
}
return false;
}
private boolean isArea(int x,int y,char [][]board){
return x>=0&&x<board.length&&y>=0&&y<board[0].length;
}
}