class Solution:
def exist(self, board: List[List[str]], word: str) -> bool:
m = len(board)
n = len(board[0])
def dfs(k,i,j):
if i<0 or j<0 or i>=m or j>=n:
return False
if (board[i][j] != word[k]):
return False
if k >= (len(word)-1):
return True
tmp = board[i][j]
board[i][j] = '*'
res = dfs(k+1,i+1,j) or dfs(k+1,i-1,j) or dfs(k+1,i,j+1) or dfs(k+1,i,j-1)
board[i][j] = tmp
return res
for i in range(m):
for j in range(n):
if dfs(0,i,j):
return True
return False