题解:
本题是一个遍历搜索问题,我们可以用回溯算法进行求解。
- 在本题中,我们需要对二维网格的每个单元格进行遍历来查找和word的匹配;
因此我们首先建立一个二层的循环来遍历每一个单元格;
代码如下:
class Solution:
def exist(self, board, word):
#设置数组中的元素只能被使用一次
used = [[False] * len(board[0]) for i in range(len(board))]
# print(used)
for i in range(len(board)):
for j in range(len(board[0])):
if(self.dfs_search(board, i, j,word,0,len(word) - 1)):
return True
return False
- 同时,在网格内移动的时候,我们可以向四个方向进行移动查找和word中一个字母的匹配(实际中需要排除来到这个位置的方向,只有三个方向;但是这个需要我们写代码去排除,并且,每个元素进行查找时需要排除的方向不一样,因此在代码中我们依旧写四个方向)
代码如下:
def dfs_search(self, board, x, y, word,index,length_word):
if board[x][y] != word[0]:
return False
#递归终止条件
if index == length_word:
return True
#四个方向进行遍历
# print(x,y)
# print(word[0])
# print('index,',index)
# print('word',len(word) - 1)
# if board[x][y] == word[0]:
# used[x][y] = True
tmp = board[x][y]
board[x][y] = 0
#向下遍历
if (x < len(board) - 1 and self.dfs_search(board, x + 1, y, word[1:],index + 1,length_word)) or \
(y < len(board[0]) - 1 and self.dfs_search(board, x, y + 1, word[1:],index + 1,length_word)) or \
(x > 0 and self.dfs_search(board, x - 1, y, word[1:], index + 1,length_word)) or \
(y > 0 and self.dfs_search(board