题目:
题目链接: https://leetcode-cn.com/problems/word-search/
解题思路:
先对二维数组遍历寻找单词的首个字母,如果找到,递归的对当前位置的上下左右查找单词的后续字母
图解如下(假设搜索方向顺序为上 → 下 → 左 → 右):
代码实现:
class Solution:
def exist(self, board: List[List[str]], word: str) -> bool:
def __search(board, row, column, word, start):
if start >= len(word):
return True
# up
if row > 0 and board[row - 1][column] == word[start]:
board[row - 1][column] = '0'
if True == __search(board, row - 1, column, word, start + 1):
return True
board[row - 1][column] = word[start]
# down
if row < len(board) - 1 and board[row + 1][column] == word[start]:
board[row + 1][column] = '0'
if True == __search(board, row + 1, column, word, start + 1):
return True
board[row + 1][column] = word[start]
# left
if column > 0 and board[row][column - 1] == word[start]:
board[row][column - 1] = '0'
if True == __search(board, row, column - 1, word, start + 1):
return True
board[row][column - 1] = word[start]
# right
if column < len(board[0]) - 1 and board[row][column + 1] == word[start]:
board[row][column + 1] = '0'
if True == __search(board, row, column + 1, word, start + 1):
return True
board[row][column + 1] = word[start]
return False
for i in range(0, len(board)):
for j in range(0, len(board[0])):
if board[i][j] == word[0]:
board[i][j] = '0'
if True == __search(board, i, j, word, 1):
return True
board[i][j] = word[0]
return False