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