LeetCode 79 單詞搜尋

2021-10-09 09:54:32 字數 992 閱讀 8882

給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。

單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中「相鄰」單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。

直接回溯演算法進行搜尋

from typing import *

class solution:

def exist(self, board: list[list[str]], word: str) -> bool:

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

visited = [[false] * n for _ in range(m)]

dir1 = [-1, 0, 0, 1]

dir2 = [0, 1, -1, 0]

flag = false

def back(x1, y1, idx):

nonlocal flag

if idx >= len(word) or board[x1][y1] != word[idx] or flag:

return

if idx == len(word) - 1:

flag = true

visited[x1][y1] = true

for i in range(4):

x2, y2 = x1 + dir1[i], y1 + dir2[i]

if 0 <= x2 < m and 0 <= y2 < n and not visited[x2][y2]:

back(x2, y2, idx + 1)

visited[x1][y1] = false

for i in range(m):

for j in range(n):

back(i, j, 0)

return flag

時間複雜度o(mn3^l)。內部迴圈每次最多進入三個分支,因為來的分支不可能再次進入。實際操作複雜度遠遠小於該值。

leetcode 79 單詞搜尋

本題算是乙個組合類的題,也類似於深度優先搜尋演算法 設定乙個與字母構成的陣列大小相同的陣列,用來儲存某個位置的字母是否被訪問過,標註為1表示已被訪問過,避免重複 每次要看i,j位置上下左右的字母是否等於單詞第t個位置的字母 進行深度優先搜尋 bool find std vector board,st...

leetcode 79 單詞搜尋

給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。示例 board a b c e s f c s a d e e 給定 word abcced 返回t...

Leetcode 79 單詞搜尋

給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。示例 board a b c e s f c s a d e e 給定 word abcced 返回 ...