题目链接
这道题细节很多,一不小心就超时
①引用传递,避免整体赋值
②短路或,当值为真时便不会往下进行
```class Solution {
public:
bool vis[210][210];
bool exist(vector<vector<char>>& board, string word) {
memset(vis, false, sizeof vis);
int n = board.size(), m = board[0].size();
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (board[i][j] == word[0]) {
if (dfs(board, word, i, j, 0)) {
return true;
}
}
}
}
return false;
}
bool dfs(vector<vector<char>>& mp, string word, int x, int y, int pos) {
if (x < 0 || x >= mp.size() || y < 0 || y >= mp[0].size() || vis[x][y] || mp[x][y] != word[pos]) return false;
if (pos == word.size() - 1) return true;
vis[x][y] = true;
bool res = dfs(mp, word, x + 1, y, pos + 1)
|| dfs(mp, word, x - 1, y, pos + 1)
|| dfs(mp, word, x, y + 1, pos + 1)
|| dfs(mp, word, x, y - 1, pos + 1);
vis[x][y] = false;
return res;
}
};