回溯
单词搜索
题目要做什么
判断能否在字符网格中沿上下左右相邻格拼出 word。同一个格子在同一条路径中最多使用一次。
题目示例输入
board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"题目示例输出
true01 为什么这样做
从每个格子尝试 DFS。字符匹配后暂时标记格子已用,再搜索下一字符;返回前恢复格子。这样其他搜索路径仍能使用它。
始终成立的条件
被标记的格子恰好是当前搜索路径,恢复后 board 与调用前一致。
02 看见算法执行
动画与代码同步修改输入,播放自己的例子
当前使用题目示例修改输入会改变执行过程;预期输出用于核对结果。
数组 / nums步骤 1
执行状态
本次演示输出
播放到最后查看Solution.java参考解法
1class Solution {2 public boolean exist(char[][] board, String word) {3 for (int r = 0; r < board.length; r++) {4 for (int c = 0; c < board[0].length; c++) {5 if (search(board, word, r, c, 0)) return true;6 }7 }8 return false;9 }10 private boolean search(char[][] board, String word, int r, int c, int index) {11 if (r < 0 || c < 0 || r >= board.length || c >= board[0].length12 || board[r][c] != word.charAt(index)) return false;13 if (index == word.length() - 1) return true;14 char saved = board[r][c];15 board[r][c] = '