在矩阵中搜索,很容易联想到回溯和dfs。还是按照常规规定,按照右,下,左,上的顺序进行递归,设置一个和矩阵相同的二维数组判断该位置是否访问过,剩下就是回溯的一般写法了。
class Solution {
char[] words;
int row, col, len;
boolean[][] v;
public boolean exist(char[][] board, String word) {
words = word.toCharArray();
len = words.length;
row = board.length;
col = board[0].length;
v = new boolean[row][col];
// 循环寻找board和word[0]相同的字符
for (int i = 0; i < row ; i++) {
for (int j = 0; j < col ;j++) {
if (dfs(i, j, 0, board)) return true;
}
}
return false;
}
public boolean dfs(int x, int y, int step, char[][] board) {
if (x >= row || x < 0 || y >= col || y < 0 || v[x][y] || board[x][y] != words[step]) {
return false;
}
if (step == len - 1) {
return true;
}
boolean res;
v[x][y] = true;
res = dfs(x + 1, y, step +1, board) || dfs(x, y + 1, step + 1, board)
|| dfs(x - 1, y, step +1, board) || dfs(x, y - 1, step + 1, board);
v[x][y] = false;
return res;
}
}
图省事,用了全局变量,最好还是不要用全局变量,大一小白一个,java用的也不好,有问题还请指正,谢谢你。