一、题目内容

image.png

二、题解

解法1:

思路

image.png
image.png

代码

  1. class Solution {
  2. public boolean exist(char[][] board, String word) {
  3. char[] words = word.toCharArray();
  4. for (int i = 0; i < board.length; i++) {
  5. for (int j = 0; j < board[0].length; j++) {
  6. if (dfs(board, words, i, j, 0)) {
  7. return true;
  8. }
  9. }
  10. }
  11. return false;
  12. }
  13. /**
  14. * dfs
  15. *
  16. * @param board
  17. * @param word
  18. * @param i
  19. * @param j
  20. * @param k
  21. * @return
  22. */
  23. public boolean dfs(char[][] board, char[] word, int i, int j, int k) {
  24. //剪枝
  25. if (i >= board.length || i < 0 || j >= board[0].length || j < 0 || board[i][j] != word[k]) {
  26. return false;
  27. }
  28. //提前返回正确结果
  29. if (k == word.length - 1) {
  30. return true;
  31. }
  32. //标记已访问
  33. board[i][j] = '\0';
  34. boolean res = dfs(board, word, i + 1, j, k + 1) || //右
  35. dfs(board, word, i - 1, j, k + 1) || //左
  36. dfs(board, word, i, j + 1, k + 1) || //下
  37. dfs(board, word, i, j - 1, k + 1); //上
  38. //还原
  39. board[i][j] = word[k];
  40. return res;
  41. }
  42. }