LeetCode79:Word Search
阿新 • • 發佈:2019-01-12
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