给定2D板和单词,找出网格中是否存在该单词。
这个词可以用顺序相邻的字母构成 细胞,其中“相邻”细胞是水平或垂直细胞 邻接。相同的字母单元格不得多次使用。
例如,Given
board = [ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E'] ] word = "ABCCED", -> returns true word = "SEE", -> returns true word = "ABCB", -> returns false
这是典型的DFS +回溯解决方案。它会将board[row][col]
与word[start]
进行比较。如果匹配,请将board[row][col]
更改为‘#’
,将其标记为已访问。然后移动到下一个(即word[start + 1]
)并将其与当前邻居(通过递归进行比较)进行比较。
以下是我的代码无效。我试过调试,但我感觉有一个错误,我无法跟踪。
class Solution(object):
def exist(self, board, word):
def match(board, word, r, c, index):
if r < 0 or r >= len(board) or c < 0 or c >= len(board[0]) or index < 0 or index > len(word):
return False
if index == len(word):
return True
directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]
for x, y in directions:
tmp = board[r][c]
board[r][c] = "#"
if tmp == word[index] and match(board, word, r+x, r+y, index+1):
return True
board[r][c] = tmp
return False
"""
:type board: List[List[str]]
:type word: str
:rtype: bool
"""
if board == word:
return True
if not board and word or board and not word:
return False
for r in range(len(board)):
for c in range(len(board[0])):
if match(board, word, r, c, 0):
return True
return False
答案 0 :(得分:0)
通过对这个问题的评论中的@jeff建议进行修复,即&#34; r + y&#34;应该是&#34; c + y&#34;。