LeetCode 79 [Word Search]

作者: Jason_Yuan | 来源:发表于2016-07-26 13:23 被阅读229次

    原题

    给出一个二维的字母板和一个单词,寻找字母板网格中是否存在这个单词。
    单词可以由按顺序的相邻单元的字母组成,其中相邻单元指的是水平或者垂直方向相邻。每个单元中的字母最多只能使用一次。

    样例
    给出board =
    [
    "ABCE",
    "SFCS",
    "ADEE"
    ]
    word = "ABCCED", ->返回 true,
    word = "SEE",-> 返回 true,
    word = "ABCB", -> 返回 false.

    解题思路

    • 遍历二维数组的每一个点,当作起始点做DFS
    • 在进入DFS后,对于访问过的节点标记为None,以表明访问过
    • 关于回溯要注意的是,如果返回True其实就结束了,以为已经找到答案了,也不需要回溯。如果不返回True,而是改变一个全局变量self.res的值为True,会超时

    完整代码

    class Solution(object):
        def __init__(self):
            self.word = ""
            
        def exist(self, board, word):
            """
            :type board: List[List[str]]
            :type word: str
            :rtype: bool
            """
            self.word = word
            for row_num in range(len(board)):
                for col_num in range(len(board[0])):
                    if self.search(board, row_num, col_num, 0):
                        return True
                    
            return False
            
        def search(self, board, x, y, pos):
            if self.word[pos] == board[x][y]:
                if pos == len(self.word) - 1:
                    return True
                else:
                    temp = board[x][y]
                    board[x][y] = None
                    if x + 1 < len(board) and self.search(board, x + 1, y, pos + 1):
                        return True
                    if x - 1 >= 0 and self.search(board, x - 1, y, pos + 1):
                        return True
                    if y + 1 < len(board[0]) and self.search(board, x, y + 1, pos + 1):
                        return True
                    if y - 1 >= 0 and self.search(board, x, y - 1, pos + 1):
                        return True
                    board[x][y] = temp
                    return False
            else:
                return False
    

    相关文章

      网友评论

        本文标题:LeetCode 79 [Word Search]

        本文链接:https://www.haomeiwen.com/subject/hqmnjttx.html