LeetCode 79 單詞搜尋

2021-10-09 09:54:32 字數 1459 閱讀 1365

題目描述

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

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

示例:

board =[[

'a',

'b',

'c',

'e'],[

's',

'f',

'c',

's'],[

'a',

'd',

'e',

'e']

]給定 word =

"abcced"

, 返回 true

給定 word =

"see"

, 返回 true

給定 word =

"abcb"

, 返回 false

解題思路

這道題目就是使用深度優先遍歷+回溯完成。其實現思路就是,向四周進行搜尋,只要搜尋到乙個正確的解,就返回true。需要注意已經遍歷過的值就不能遍歷了,所以我們把他設定為了0,避免重複遍歷。

我們設定了乙個flag標記,只要遍歷成功一次,就設flag為true,之後就不需要再遍歷了。

**實現

/**

* @param board

* @param word

* @return

*/var

exist

=function

(board, word)

// 暫存當前的節點值

const temp = board[i]

[j]// 將當前的節點值設定為0,避免重複遍歷

board[i]

[j]=

0// 分別向上下左右進行深度優先遍歷

const up =

dfs(i, j-

1, k+1)

const down =

dfs(i, j+

1, k+1)

const left =

dfs(i-

1, j, k+1)

const right =

dfs(i+

1, j, k+1)

// 遍歷完成後,還原當前值

board[i]

[j]= temp

return up || down || left || right

}// 遍歷整個二維陣列,對元素進行深度優先遍歷

for(

let i =

0; i < row; i++)}

return

false

};

提交結果

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