LeetCode演算法題79 單詞搜尋解析

2021-09-11 03:04:07 字數 2096 閱讀 3974

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

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

示例:

board =

[ ['a','b','c','e'],

['s','f','c','s'],

['a','d','e','e']

]給定 word = "abcced", 返回 true.

給定 word = "see", 返回 true.

給定 word = "abcb", 返回 false.

這個題就是乙個迷宮題,一般就是使用dfs來進行搜尋,不同的是這裡不是乙個開始點,要對每乙個點都開始一次搜尋。用乙個陣列來標記所有的地方是否被走過。具體思路看程式會更清楚一些。有意思的一點是,c++程式中如果使用bool型別來定義標記陣列,那麼就會很慢而且占用空間非常大,而使用int型別定義標記陣列時,程式執行速度會很快而且占用空間會減少很多。

c++源**:

class

solution

}return

false;}

bool

search

(vectorchar

>>

& board, string& word,

int idx,

int x,

int y, vectorint>>

& flag)

};

python3源**:

class

solution

:def

exist

(self, board, word)

:"""

:type board: list[list[str]]

:type word: str

:rtype: bool

"""iflen

(board)==0

orlen

(word)==0

:return

false

m =len(board)

n =len(board[0]

) flag =[[

0for j in

range

(n)]

for i in

range

(m)]

for i in

range

(m):

for j in

range

(n):

if self.search(board, word,

0, i, j, flag)

:return

true

return

false

defsearch

(self, board, word, idx, x, y, flag)

:if idx ==

len(word)

:return

true

m =len(board)

n =len(board[0]

)if x<

0or y<

0or x>=m or y>=n or flag[x]

[y]or board[x]

[y]!=word[idx]

:return

false

flag[x]

[y]=

1 res = self.search(board, word, idx+

1, x+

1, y, flag)

or self.search(board, word, idx+

1, x-

1, y, flag)

or self.search(board, word, idx+

1, x, y+

1, flag)

or self.search(board, word, idx+

1, x, y-

1, flag)

flag[x]

[y]=

0return res

leetcode演算法練習 79 單詞搜尋

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

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...