給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。
單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中「相鄰」單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。
示例:
board =bool exist(vector>& board, string word)[ ['a','b','c','e'],
['s','f','c','s'],
['a','d','e','e']
]給定 word = "abcced", 返回 true.
給定 word = "see", 返回 true.
給定 word = "abcb", 返回 false.
1、這道題給定乙個二維的vector,裡面存放著多個英文本元,還給了乙個string,代表乙個英文單詞。
要求判斷二維vector中存不存在一條路徑,連起來剛好就是string代表的單詞。
這條路徑不能使用重複的字元。
如果存在這樣一條路徑,那麼返回true,不存在就返回false。
2、這道題其實也就是深度優先搜尋(dfs)的題目,熟悉這個演算法的同學做這道題會很快。
我們還是照舊,舉個例子,大致說明一下思路。
board =給定的單詞是see,那麼我們首先在矩陣中找到s,有兩個,我們先試第乙個,明顯第二個字母就對不上了,於是我們進入對第二個的查詢。[ ['a','b','c','e'],
['s','f','c','s'],
['a','d','e','e']
]
在第二個周圍,我們先試s上方的e,然後再在這個e的周圍找另乙個e,明顯沒有。
於是我們退一步,不試s上方的e了,我們嘗試s下方的e,可以,再在其附近找另乙個e,也找得到。
我們在嘗試的時候,要注意這個字元之前有沒有使用過,這一步要做點處理。
從上述思路中,我們可以知道要用迴圈+遞迴的方法來做這道題。
先用迴圈找到第乙個字元的索引,然後進入遞迴,如果遞迴成功找到了,那麼返回true。
如果不存在,那麼再迴圈找第乙個字元的下乙個索引,然後同樣進入遞迴,如果遞迴成功了,那麼返回true。
如果還是沒有,那麼再迴圈,一直迴圈,如果一直不滿足,最後返回false。
**如下(附詳解):
bool dfs(vector>& board,int i,int j,string word,int index)}if(i0)//嘗試左邊的字元
}if(j>& board, string word)
{int hang=board.size(),lie=board[0].size();
for(int i=0;i
上述**實測20ms,beats 94.50% of cpp submissions。
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 返回 ...