Navicat导入导出表数据
2026/6/8 16:50:43
参考:https://leetcode.cn/problems/word-search/solutions/2361646/79-dan-ci-sou-suo-hui-su-qing-xi-tu-jie-5yui2/?envType=study-plan-v2&envId=top-100-liked
深度优先搜索(DFS)+ 剪枝
class Solution: def exist(self, board: List[List[str]], word: str) -> bool: def dfs(i,j,k): if not 0<=i<len(board) or not 0<=j<len(board[0]) or board[i][j] != word[k]: return False if k == len(word)-1: return True board[i][j] = '' res = dfs(i+1,j,k+1) or dfs(i-1,j,k+1) or dfs(i,j+1,k+1) or dfs(i,j-1,k+1) board[i][j] = word[k] return res for i in range(len(board)): for j in range(len(board[0])): if dfs(i,j,0):return True return Falseboard中的行列索引i和j,当前目标字符在word中的索引k。终止条件:
false:(1) 行或列索引越界或(2) 当前矩阵元素与目标字符不同或(3) 当前矩阵元素已访问过 ( (3) 可合并至 (2) )
true:k = len(word) - 1,即字符串word已全部匹配。
递推工作:
board[i][j]修改为空字符'',代表此元素已访问过,防止之后搜索时重复访问。搜索下一单元格: 朝当前元素的 上、下、左、右 四个方向开启下层递归,使用 或 连接 (代表只需找到一条可行路径就直接返回,不再做后续 DFS ),并记录结果至 res 。
board[i][j]元素还原至初始值,即word[k]。res,代表是否搜索到目标字符串。