矩阵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解决方案中的单词搜索不起作用的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode79 单词搜索(dfs)

LeetCode第[79]题(Java):Word Search(矩阵单词搜索)

LintCode 单词搜索Ⅱ 字典树

简单的二进制搜索对我不起作用。我正在尝试从文本文件中搜索单词

leetcode打卡--240. 搜索二维矩阵 II

leetcode-矩阵中的路径-55