当前位置: 首页 > 知识库问答 >
问题:

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

宿文栋
2023-03-14

给定一个二维板和一个单词,找出这个单词是否存在于网格中。

这个词可以由顺序相邻单元格的字母构成,其中“相邻”单元格是那些水平或垂直相邻的单元格。同一个字母单元格不能使用不止一次。

例如,给定

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+回溯解决方案。它将板[row][col]字[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个答案

金烨华
2023-03-14

它是通过遵循@Jeff对这个问题的评论中的建议来解决的,即“R+Y”应该是“C+Y”。

 类似资料:
  • 这道题是 LeetCode 212 题,是 79 题的升级版。 给定一个二维网格和包含多个单词的字典,找出所有同时在二维网格和字典中出现的单词。 解法一:回溯 直接使用 79 题的代码,依次查找每个单词是否在 board 中有一条对应的路径。 时间复杂度:$(n×4^L)$,$n$ 为单词个数,$L$ 为单词的最大长度 搜索每个单词的时间复杂度相当于搜索树的节点数。搜索最大深度为 $L$,$L$

  • 对于python我是新手,我正在做leetcode问题94,二叉树顺序遍历。给定二叉树的根,返回对其节点值的inorder遍历。 但我还是不明白它为什么有用。在之后,在递归过程中,res变量不会被重新分配给[]吗?或者res变量在不同的递归中应该是不同的变量吗?

  • 如果搜索字符串和目标对象最后有以下任何字符,那么它就不起作用。s y e 在我们的应用程序中,如果用户名为Granny,Smith。它没有搜索奶奶的任何记录,因为它以y结尾。s和e的情况也是如此,即詹姆斯、凯蒂。

  • 以下是对不熟悉此问题的人的问题声明: 给定一个二维板和一个单词,找出这个单词是否存在于网格中。这个词可以由顺序相邻单元格的字母构成,其中“相邻”单元格是那些水平或垂直相邻的单元格。同一个字母单元格不能使用不止一次。 解决方案2 现在,据我所知,随着Java的短路,的两个版本都应该停止探索其他路径,如果任何子问题返回true。事实上,我可以评估的两个版本之间唯一的操作差异是,如果找到解决方案,第一个

  • 我想将第一行与来自user的输入隔离为VIX、SPX和VOL。然而,在这样的数据库中,我不知道这些变量是在哪个组合中保存的。 也就是说,我们可以将VIX设为Var1,SPX设为Var2,VOL设为Var3,也可以将VOL设为Var1,SPX设为Var2,VIX设为Var3。在这种情况下,可以有6种组合。 我可以将字符串串联起来,在R中创建所有6种可能性,并进行行查找。但我正在寻找一个更简单的算法。

  • 1. 把数组中的 0 移到末尾 2. 改变矩阵维度 3. 找出数组中最长的连续 1 4. 有序矩阵查找 5. 有序矩阵的 Kth Element 6. 一个数组元素在 [1, n] 之间,其中一个数被替换为另一个数,找出重复的数和丢失的数 7. 找出数组中重复的数,数组值在 [1, n] 之间 8. 数组相邻差值的个数 9. 数组的度 10. 对角元素相等的矩阵 11. 嵌套数组 12. 分隔数组