题目要求:
分析:
这道题目采用 DFS + 回溯 来做,它有四个方向来判断。设置一个visited数组,用来节点表示有没有访问过。
话说不清楚,直接上代码吧。
具体代码如下:
class Solution {
public boolean exist(char[][] board, String word) {
int m = board.length, n = board[0].length;
boolean[][] visited = new boolean[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (word.charAt(0) == board[i][j] && dfs(i, j, 0, word, board, visited))
return true;
}
}
return false;
}
private boolean dfs(int i, int j, int index, String word, char[][] board, boolean[][] visited) {
if(index == word.length())
return true;
int m = board.length, n = board[0].length;
if(i < 0 || i >= m || j < 0 || j >= n || visited[i][j] || board[i][j] != word.charAt(index))
return false;
visited[i][j] = true;
if(dfs(i + 1, j, index + 1, word, board, visited) || dfs(i, j + 1, index + 1, word, board, visited)
|| dfs(i - 1, j, index + 1, word, board, visited) || dfs(i, j - 1, index + 1, word, board, visited))
return true;
visited[i][j] = false;
return false;
}
}