題目:
給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。
單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中「相鄰」單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。
示例:
board =
[ ['a','b','c','e'],
['s','f','c','s'],
['a','d','e','e']
]給定 word = "abcced", 返回 true
給定 word = "see", 返回 true
給定 word = "abcb", 返回 false
分析:
該題的本質就是在這個二維陣列中,從某個位置的元素出發,尋找乙個連通分量,然後判斷按照這個連通分量搜尋的順序構成的乙個字串是否和給定的的單詞相同,不同則一步一步的回溯,分別判斷能否尋找到與給定單詞相同的一串字串。具體的操作如下:
首先,遍歷這個二維陣列,當目前正在遍歷的字元和給定字串首字元相同時,那麼就開始進行深度搜尋;
其中需要注意的是,當某個點在可選擇的四個方向都走完依舊不能得到結果時,說明「此路不通」,那麼就要向上回溯,選擇其父親節點的其他鄰接子節點,回溯的時候,要將此點對應的訪問標記陣列值設定為false,方便以後走其他方向時可以繼續訪問此點。
**:
private int dirs;
private int m;
private int n;
private arraylistres;
public boolean exist(char board, string word) ,,,};
stringbuffer tempstr = new stringbuffer();
res = new arraylist<>();
for (int i = 0; i < m; i++) }}
}return false;
}private void findwordbydfs(int k, stringbuffer tempstr, string word, char board, int i, int j,boolean isvisited)
return;
}if (i < 0 || i >= m || j < 0 || j >= n || isvisited[i][j] || word.charat(k) != board[i][j])
isvisited[i][j] = true;
if (tempstr.tostring().equals(word))
for (int dir : dirs)
if (!isvisited[cur_i][cur_j])
}isvisited[i][j] = false;
tempstr.deletecharat(k);
}
private int dirs;
private int m;
private int n;
public boolean exist(char board, string word) ,,,};
boolean isvisited = new boolean[m][n];
for (int i = 0; i < m; i++) }}
return false;
}private boolean findwordbydfs(int k, string word, char board, int i, int j,boolean isvisited)
if (i < 0 || i >= m || j < 0 || j >= n || isvisited[i][j] || word.charat(k) != board[i][j])
isvisited[i][j] = true;
for (int dir : dirs)
}isvisited[i][j] = false;
return false;
}
力扣79 單詞搜尋
給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。示例 board a b c e s f c s a d e e 給定 word abcced 返回 ...
力扣79 單詞搜尋
class solution return false public boolean existhelper char board,boolean used,char word,int idx,int col,int row if used row col true board row col wo...
力扣 79 單詞搜尋
題目 直接看劍指offer第六十五題矩陣中的路徑 給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。示例 board a b c e s f c s a...