給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。
單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中「相鄰」單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。
示例:
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...