题解 | #牛群定位系统#

牛群定位系统

https://www.nowcoder.com/practice/d808aaa4c13c4d38bff333aa796e6a1e

  • 题目考察的知识点 : 深度优先搜索
  • 题目解答方法的文字分析:
  1. 深度优先搜索遍历整个矩阵。我们对每个位置进行 DFS,将得到的字符串与目标单词列表中的单词进行比较,用 visited 矩阵记录当前位置是否被访问过,以避免重复访问,如果存在则将其加入结果集中
  • 本题解析所用的编程语言: Python
  • 完整且正确的编程代码

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param board char字符型二维数组
# @param words string字符串一维数组
# @return string字符串一维数组
#
class Solution:
    def findWords(self, board: List[List[str]], words: List[str]) -> List[str]:
        result = []

        for word in words:
            if self.exist(board, word):
                result.append(word)

        return result

    def exist(self, board: List[List[str]], word: str) -> bool:
        rows, cols = len(board), len(board[0])
        visited = [[False] * cols for _ in range(rows)]

        for i in range(rows):
            for j in range(cols):
                if self.dfs(board, word, i, j, 0, visited):
                    return True

        return False

    def dfs(
        self,
        board: List[List[str]],
        word: str,
        row: int,
        col: int,
        index: int,
        visited: List[List[bool]],
    ) -> bool:
        if index == len(word):
            return True

        if (
            row < 0
            or row >= len(board)
            or col < 0
            or col >= len(board[0])
            or visited[row][col]
            or board[row][col] != word[index]
        ):
            return False

        visited[row][col] = True

        directions = [
            [0, 1],  # 右
            [0, -1],  # 左
            [1, 0],  # 下
            [-1, 0],  # 上
        ]

        for dx, dy in directions:
            new_row, new_col = row + dx, col + dy

            if self.dfs(board, word, new_row, new_col, index + 1, visited):
                return True

        visited[row][col] = False

        return False
牛客高频top202题解系列 文章被收录于专栏

记录刷牛客高频202题的解法思路

全部评论

相关推荐

这算盘打的
程序员小白条:都这样的,都是潜规则,你自己说可以实习一年就行了,实习可以随便跑路的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务