leetcode79单词搜索
使用算法:DFS 递归加回溯
具体思路:
先设置一个针对于表格中当前位置x方位偏移量的数组和一个针对于表格当前位置y方位偏移量的数组
然后针对表格中的每个位置调用dfs
递归返回条件:
1、表格当前位置的字符与此刻单词中的字符不对应时
2、最后一个字符符合时
递归条件:
位置没有越界且表格中下一个位置的字符和单词中下一个位置的字符符合,返回ture。
class Solution {
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, -1, 0, 1};
public:
bool exist(vector<vector<char>>& board, string word) {
for (int i = 0; i < board.size(); i++) {
for (int j = 0; j < board[0].size(); j++) {
if (dfs(board, word, 0, i, j))
return true;
}
}
return false;
}
bool dfs(vector<vector<char>>& board, string word, int idx, int x, int y) {
if (word[idx] != board[x][y])
return false;
if (idx == word.length() - 1)
return true;
char t = board[x][y];
board[x][y] = '\0';
for (int i = 0; i < 4; i++) {
int nx = x + dx[i], ny = y + dy[i];
if (nx < 0 || nx >= board.size() || ny < 0 ||
ny >= board[0].size() || board[nx][ny] == '\0')
continue;
if (dfs(board, word, idx + 1, nx, ny))
return true;
}
board[x][y] = t;
return false;
}
};