這道題的思路主要還是考察深度優先遍歷 + 回溯, 主要思路就是遍歷二維陣列每個元素,當發現元素和目標單詞的首字母相同時,就進入遞迴,沿該元素的四個方向進行依次查詢,用乙個雜湊表標記已經訪問過的位置,在遞迴過程中,若找到則返回true,若未找到,則遞迴回來時,要重置雜湊表狀態
/**
* @param board
* @param word
* @return
*/var
exist
=function
(board, word)
;for
(let i=
0; i}return
false
;function
search
(i, j, nextindex)
;let key =`$
-$`;
//陣列越界、已經訪問過、對應字母不相等時直接返回false
if(i <
0|| j <
0|| i >= m || j >=n || map[key]
|| board[i]
[j]!== word[nextindex]
) map[key]
=true
;let success =
search
(i+1
, j, nextindex +1)
//沿4個方向尋找
||search
(i-1
, j, nextindex +1)
||search
(i, j+
1, nextindex +1)
||search
(i, j-
1, nextindex +1)
; map[key]
= success;
//失敗時要重置位置狀態
return success;}}
;
79 單詞搜尋
給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。示例 board a b c e s f c s a d e e 給定 word abcced 返回t...
79 單詞搜尋
不允許重複使用字母 seen 0for i in range n for j in range m for i in range m for j in range n if self.search board,word,0,i,j,seen return true return false word...
79 單詞搜尋
給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。示例 board a b c e s f c s a d e e 給定 word abcced 返回 ...