check up, down, left, right, if see the right letter, because word[next] can only be adjacent.
2. in order to avoid repeated checking, set the board[index] = '0'
还需要练习
class Solution:
def exist(self, board: List[List[str]], word: str) -> bool:
# edge case
if len(board) == 0 or len(board[0]) == 0:
return False
# regular case
for i in range(len(board)):
for j in range(len(board[0])):
if self.find(board, word, 0, i, j) == True:
return True
return False
def find(self, board, word, x, i, j):
# stop condition
if x == len(word):
return True
# regular case
m = len(board) - 1
n = len(board[0]) - 1
if i < 0 or i > m or j < 0 or j > n or board[i][j] != word[x]:
return False
tmp = board[i][j]
board[i][j] = '0'
res = self.find(board, word, x+1, i+1, j) or self.find(board, word, x+1, i-1, j) or self.find(board, word, x+1, i, j+1) or self.find(board, word, x+1, i, j-1)
board[i][j] = tmp
return res