leetcode79 單詞搜尋 小羊的記錄本

2021-10-09 05:11:06 字數 1770 閱讀 5891

79.單詞搜尋

一周沒刷題了orz,堅持果然是最難的,但是刷永遠比不刷好!加油吧小羊~

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

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

示例:

board =[[

'a',

'b',

'c',

'e'],[

's',

'f',

'c',

's'],[

'a',

'd',

'e',

'e']

]給定 word =

"abcced"

, 返回 true

給定 word =

"see"

, 返回 true

給定 word =

"abcb"

, 返回 false

board 和 word 中只包含大寫和小寫英文本母。

1 <= board.length <= 200

1 <= board[i].length <= 200

1 <= word.length <= 10^3

思路

1.標記類的回溯演算法,需要visited[i][j]作為剪枝的要求;

2.在方向類的回溯演算法中,用int direction=,,,},方便尋找上下左右的網格,擴充套件到只能往右邊和往下邊尋找的回溯演算法也是如此;

3.對於乙個字串,得設定當前判斷的index,設定指標,判斷當前字元是否和回溯中找到的字元相等。最後的判斷是 當中指標指向字串的最後乙個字元時,回溯中遍歷到的字元恰好等於該字元。

**:

class

solution,,

,};public

boolean

exist

(char

board, string word)}}

return

false;}

//dfs來了,一般傳參要考慮 原來函式中的傳參,會改變的引數(行、列、visited、字串指標的位置)

public

boolean

dfs(

int row,

int col,

int ids,

boolean

flag ,

char

board, string word)

//add 判斷當前回溯到的字元是否等於字串中指標指向的字元

//dfs 遍歷上下左右的網格,但是得先判斷網格是否越界,再判斷題目中要求的 當前字元沒有被訪問過,最後再呼叫dfs

if(board[row]

[col]

==word.

charat

(ids))}

}//remove 這裡的剪枝就是把訪問的不是當前字元的visited改回false

flag[row]

[col]

=false

;return

false;}

//判斷網格是否越界

public

boolean

invaid

(int row,

int col,

int m,

int n)

return

true;}

}

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