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