矩阵leetcode解决方案中的单词搜索不起作用
Posted
技术标签:
【中文标题】矩阵leetcode解决方案中的单词搜索不起作用【英文标题】:Word search in a matrix leetcode solution not working 【发布时间】:2018-02-08 08:53:47 【问题描述】:给定一个二维板和一个单词,找出该单词是否存在于网格中。
单词可以由顺序相邻的字母构成 单元格,其中“相邻”单元格是水平或垂直的单元格 邻接。同一个字母单元格不能多次使用。
例如,给定
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
【问题讨论】:
您是否可以与我们分享实际的错误消息,或者您的实施不会导致预期的结果? “r+y”应该是“c+y” 【参考方案1】:通过遵循 cmets 对这个问题的 @jeff 建议来解决这个问题,即“r+y”应该是“c+y”。
【讨论】:
以上是关于矩阵leetcode解决方案中的单词搜索不起作用的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode第[79]题(Java):Word Search(矩阵单词搜索)