https://leetcode-cn.com/problems/word-search/

深度优先遍历 + 添加现场

  1. public boolean exist(char[][] board, String word) {
  2. char[] w = word.toCharArray();
  3. for (int i = 0; i < board.length; i++) {
  4. for (int j = 0; j < board[0].length; j++) {
  5. if (process(board, i, j, w, 0)) {
  6. return true;
  7. }
  8. }
  9. }
  10. return false;
  11. }
  12. private boolean process(char[][] board, int i, int j, char[] w, int k) {
  13. if (k == w.length) {
  14. return true;
  15. }
  16. if (i < 0 || i == board.length || j < 0 || j == board[0].length) {
  17. return false;
  18. }
  19. if (w[k] != board[i][j]) {
  20. return false;
  21. }
  22. char tmp = board[i][j];
  23. //不走回头路机制 --> 增加现场
  24. board[i][j] = 0;
  25. boolean ans = process(board, i - 1, j, w, k + 1)
  26. || process(board, i + 1, j, w, k + 1)
  27. || process(board, i, j - 1, w, k + 1)
  28. || process(board, i, j + 1, w, k + 1);
  29. // 恢复现场
  30. board[i][j] = tmp;
  31. return ans;
  32. }