79. 单词搜索(中等)-回溯

2023-05-27  本文已影响0人  MatrixZ

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

分析

class Solution:
    def exist(self, board: List[List[str]], word: str) -> bool:
        # 学习到了两点,python判断区间可以一个表达式
        # 可以通过对原始矩阵改变然后在恢复来避免额外的空间占用

        m, n = len(board), len(board[0])

        word_n = len(word)

        def backtrack(i, j, k):
            # 一般可以在这里设置停止条件,最后一个条件也是剪枝
            if not 0 <= i < m or not 0 <= j < n or board[i][j] != word[k]:
                return False
            
            if k == word_n - 1:
                print(k)
                return True
            
            board[i][j], tmp = "/", board[i][j]
            res = backtrack(i - 1, j, k + 1) or backtrack(i + 1, j, k + 1) or  backtrack(i, j - 1, k + 1) or backtrack(i, j + 1, k + 1)
            board[i][j] = tmp

            return res
        
        for i in range(m):
            for j in range(n):
                if backtrack(i, j, 0): return True

        return False
上一篇 下一篇

猜你喜欢

热点阅读