LeetCode-剑指 Offer 12. 矩阵中的路径

吐槽自己,赋值号(=)写成了判断号(==),罪了…

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

在这里插入图片描述

思路:

  • 首先对数组进行循环,目的就是为了找到符合word的第一个值所在位置
  • 回溯使用迭代:边界条件、迭代函数、递推公式
  • 边界条件:len(word) == length,当length长度到达word长度时,跳出。因为这时length表示要找的下一个元素下标,length是从0开始,所以当length长度到达word长度时,跳出
  • 迭代函数:def existcore(self, board, row, col, rows, cols, word, path, length):
  • 递推公式:
    • if self.existcore(board, row, col-1, rows, cols, word, path, length) or self.existcore(board, row-1, col, rows, cols, word, path, length) or self.existcore(board, row, col+1, rows, cols, word, path, length) or self.existcore(board, row+1, col, rows, cols, word, path, length): haspath = True
class Solution:
    def exist(self, board: List[List[str]], word: str) -> bool:
        if board == None or word == "":
            return False
        path = [[False]*len(b) for b in board]

        rows, cols = len(board), len(board[0])
        length = 0
        for row in range(rows):
            for col in range(cols):
                # 找到正确的第一个值开始的序列
                if self.existcore(board, row, col, rows, cols, word, path, length):
                    return True
        
        return False

    def existcore(self, board, row, col, rows, cols, word, path, length):

        if len(word) == length:
            return True
        haspath = False
        if row >= 0 and row < rows and col >= 0 and col < cols and board[row][col] == word[length] and not path[row][col]:
            
            length += 1
            path[row][col] = True
        
            if self.existcore(board, row, col-1, rows, cols, word, path, length) or self.existcore(board, row-1, col, rows, cols, word, path, length) or self.existcore(board, row, col+1, rows, cols, word, path, length) or self.existcore(board, row+1, col, rows, cols, word, path, length):
                haspath = True

            if not haspath:
                length -= 1
                path[row][col] = False

        return haspath
posted @ 2022-03-12 13:02  小Aer  阅读(1)  评论(0编辑  收藏  举报  来源