题目:
我的代码:
class Solution {
public:
bool exist(vector<vector<char>>& board, string word) {
if (board.empty() || board[0].empty()) return false;
int m = board.size();
int n = board[0].size();
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (dfs(board, i, j, word)) return true;
return false;
}
bool dfs(vector<vector<char> > &board, int r, int c, string word) {
int m = board.size();
int n = board[0].size();
int dir[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
if (word.empty()) return true;
if (r >= 0 && r < m && c >= 0 && c < n && board[r][c] == word[0]) {
for (int i = 0; i < 4; i++) {
char tmp = board[r][c];
board[r][c] = 0;
if (dfs(board, r + dir[i][0], c + dir[i][1], word.substr(1))) return true;
board[r][c] = tmp;
}
}
return false;
}
};
本题是从一个二维数组中寻找一个单词,是非常经典的回溯类型的题目,枚举board中的一条路径,并且在枚举的过程中一边检查是否能够匹配上word,如果顺利的匹配完了所有word的字符,就说明找到了;如果枚举结束之后仍然没有找到,就说明不存在。