问题描述:在图中搜索给定单词,如果存在就返回
True
否则为False
.
思路:dfs搜索,一旦不符合条件就退出,直到符合条件。有矩阵的题目,要么是利用dfs、bfs遍历、要么就是动态规划找出递推条件。考虑遍历去重,visited、边界问题、合理剪枝,一旦达到目的就暂停。
代码如下
class Solution:
def exist(self,board, word):
"""
:type board: List[List[str]]
:type word: str
:rtype: bool
"""
if not word:
return True
if not board:
return False
self.m = len(board)
self.n = len(board[0])
self.ans = False
for i in range(self.m):
for j in range(self.n):
if self.ans:
return True
if board[i][j]==word[0]:
self.dfs(i,j,board,word[1:],[(i,j)])
return self.ans
def dfs(self,i,j,board,word,visited):
if word == "" or self.ans:
self.ans = True
return
d = [[0,1],[0,-1],[1,0],[-1,0]]
for p,q in d:
x,y = p+i,j+q
if self.ans:
return
if 0 <= x < self.m and 0<= y < self.n and (x,y) not in visited:
if board[x][y] == word[0]:
self.dfs(x,y,board,word[1:],visited+[(x,y)])