跳过正文
  1. 科学/
  2. 计算机/
  3. 算法/
  4. Leetcode/

0079 单词搜索

Solution

from typing import List
from itertools import pairwise

class Solution:
    def exist(self, board: List[List[str]], word: str) -> bool:
        def dfs(i: int, j: int, k: int) -> bool:
            if k == len(word) - 1:
                return board[i][j] == word[k]
            if board[i][j] != word[k]:
                return False
            c = board[i][j]
            board[i][j] = "0"
            for a, b in pairwise((-1, 0, 1, 0, -1)):
                x, y = i + a, j + b
                ok = 0 <= x < m and 0 <= y < n and board[x][y] != "0"
                if ok and dfs(x, y, k + 1):
                    return True
            board[i][j] = c
            return False

        m, n = len(board), len(board[0])
        return any(dfs(i, j, 0) for i in range(m) for j in range(n))

if __name__ == "__main__":
    sol = Solution()
    b = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]]
    print(sol.exist(b, "ABCCED"))