给定一个m x n二维字符网格board和一个字符串单词word。如果word存在于网格中返回true否则返回false。单词必须按照字母顺序通过相邻的单元格内的字母构成其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例 1输入board [[A,B,C,E],[S,F,C,S],[A,D,E,E]], word ABCCED输出true核心思路深度优先搜索 DFS 回溯遍历网格每一个起点匹配单词第一个字母四个方向递归走标记已访问避免重复走走不通就回溯恢复标记class Solution: def exist(self, board: List[List[str]], word: str) - bool: m len(board) n len(board[0]) dirs [[0, 1], [0, -1], [-1, 0], [1, 0]] def dfs(i, j, idx): if idx len(word): return True if i 0 or i m or j 0 or j n or board[i][j] ! word[idx]: return False temp board[i][j] board[i][j] # for dx, dy in dirs: if dfs(i dx, j dy, idx 1): return True board[i][j] temp return False for i in range(m): for j in range(n): if dfs(i, j, 0): return True return False