回溯法,簡單理解,我覺得可以模擬走迷宮的過程。首先是找到迷宮的入口,然後順著一條路往下走,當遇到分叉路口的時候,將這個點記下來,然後在順著某一條往下走,如果走不通了,就再折回到分叉口,沿著另一條路繼續走。
這道題,輸入字串的第乙個字元,就可以模擬迷宮的入口,查詢字串的過程就可以理解為走迷宮的過程,可以使用遞迴,簡化重複**。
**如下:
(leetcode 上給出的答案,後面得自己再整理一下。)
private
boolean
marked;
// x-1,y
// x,y-1 x,y x,y+1
// x+1,y
private
int[
] direction =,,
,};// 盤面上有多少行
private
int m;
// 盤面上有多少列
private
int n;
private string word;
private
char
board;
public
boolean
exist
(char
board, string word)
n = board[0]
.length;
marked =
newboolean
[m][n]
;this
.word = word;
this
.board = board;
for(
int i =
0; i < m; i++)}
}return
false;}
//start 是陣列的匹配下標
private
boolean
dfs(
int i,
int j,
int start)
if(board[i]
[j]== word.
charat
(start))}
} marked[i]
[j]=
false;}
return
false;}
private
boolean
inarea
(int x,
int y)
LeetCode 79 單詞搜尋(回溯DFS)
給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。示例 board a b c e s f c s a d e e 給定 word abcced 返回 ...
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...