LeetCode79:Word Search

Given a 2D board and a word, find if the word exists in the grid.

The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.

Example:

board =
[
  ['A','B','C','E'],
  ['S','F','C','S'],
  ['A','D','E','E']
]

Given word = "ABCCED", return true.
Given word = "SEE", return true.
Given word = "ABCB", return false.

LeetCode:链接

在一个二维表格里面,看看能不能连续的一笔画出word这个词。

还是经典的回溯法问题。这个题的回溯的起点可以是二维数组的任意位置。

使用dfs来搜索,首先找到第一个字母,然后进行深度搜索,已经走过的位置不能再次访问。为了避免已经用到的字母被重复搜索,将已经用到的字母临时替换为'#'。

class Solution(object):
    def exist(self, board, word):
        """
        :type board: List[List[str]]
        :type word: str
        :rtype: bool
        """
        def dfs(x, y, word):
            if len(word) == 0:
                return True
            # up
            if x > 0 and board[x-1][y] == word[0]:
                tmp = board[x][y]
                board[x][y] = '#'
                if dfs(x-1, y, word[1:]):
                    return True
                board[x][y] = tmp
            # down
            if x < len(board)-1 and board[x+1][y] == word[0]:
                tmp = board[x][y]
                board[x][y] = '#'
                if dfs(x+1, y, word[1:]):
                    return True
                board[x][y] = tmp
            # left
            if y > 0 and board[x][y-1] == word[0]:
                tmp = board[x][y]
                board[x][y] = '#'
                if dfs(x, y - 1, word[1:]):
                    return True
                board[x][y] = tmp
            # right
            if y < len(board[0]) - 1 and board[x][y+1] == word[0]:
                tmp = board[x][y]
                board[x][y] = '#'
                if dfs(x, y + 1, word[1:]):
                    return True
                board[x][y] = tmp

        if not board or not board[0]:
            return False
        for i in range(len(board)):
            for j in range(len(board[0])):
                if board[i][j] == word[0]:
                    if (dfs(i, j, word[1:])):
                        return True
        return False       

猜你喜欢

转载自blog.csdn.net/mengmengdajuanjuan/article/details/85991588