【LeetCode】79. 单词搜索

【LeetCode】79. 单词搜索_第1张图片

解题思路

  1. 可以从任意位置开始
  2. 编写回溯算法

python 代码

class Solution:
    def exist(self, board: List[List[str]], word: str) -> bool:
        for i in range(len(board)):
            for j in range(len(board[0])):
                if self.backtrace(i,j,board,word):
                    return True
        return False
        
    def backtrace(self,i,j,board,word):
        if board[i][j] == word[0]:
            # 结束标志
            if not word[1:]:
                return True
            # 进行选择
            board[i][j] = ''
            # 向上
            if i > 0 and self.backtrace(i-1,j,board,word[1:]):
                return True
            # 向下
            if i < len(board)-1 and self.backtrace(i+1,j,board,word[1:]):
                return True
            # 向左
            if j > 0 and self.backtrace(i,j-1,board,word[1:]):
                return True
            # 向右
            if j < len(board[0])-1 and self.backtrace(i,j+1,board,word[1:]):
                return True
            # 撤销选择
            board[i][j] = word[0]
            return False
        else:
            return False

s = Solution()
result = s.exist([
  ['A','B','C','E'],
  ['S','F','C','S'],
  ['A','D','E','E']
])
print(result)

你可能感兴趣的:(数据结构与算法)