79
Code:
public boolean exist(char[][] board, String word) { char[] wanted = word.toCharArray(); boolean[][] visited = new boolean[board.length][board[0].length]; for (int i = 0; i < board.length; i++) { for (int j = 0; j < board[0].length; j++) { if (search(board, wanted, 0, i, j, visited)) return true; } } return false; } // 字典 ??? 检查的位置 是否被访问过 private boolean search(char[][] board, char[] wanted, int index, int i, int j, boolean[][] visited){ if(index == wanted.length) return true; int m = board.length, n = board[0].length; // 若超出边界 或被访问过 或不符合, 返回false if (i < 0 || j < 0 || i >= m || j >= n || visited[i][j] || board[i][j] != wanted[index]) return false; // 若以上均否,则该元素满足条件,将其设置为访问过,继续寻找下一个元素 visited[i][j] = true; // 在这一元素的上下左右继续寻找 boolean res = search(board, wanted, index + 1, i - 1, j, visited) || search(board, wanted, index + 1, i + 1, j, visited) || search(board, wanted, index + 1, i, j-1, visited) || search(board, wanted, index + 1, i, j+1, visited); // 将已访问过的元素的visited拨回0 visited[i][j] = false; return res; }