矩阵leetcode解决方案中的单词搜索不起作用

时间:2018-02-08 08:53:47

标签: python algorithm

  

给定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

1 个答案:

答案 0 :(得分:0)

通过对这个问题的评论中的@jeff建议进行修复,即&#34; r + y&#34;应该是&#34; c + y&#34;。