题目链接:leetcode.
从每一个位置开始,搜索是否能匹配
/*
执行用时:452 ms, 在所有 C++ 提交中击败了28.00%的用户
内存消耗:7.1 MB, 在所有 C++ 提交中击败了71.64%的用户
*/
class Solution {
vector<vector<int>> visit;
bool dfs(vector<vector<char>>& board, int i, int j, string word, int pos)
{
if(i < 0 || j < 0 || i >= board.size() || j >= board[0].size() || visit[i][j])
{
return false;
}
if(board[i][j] != word[pos])
return false;
if(pos == word.size() - 1)
return true;
visit[i][j] = 1;
bool b1 = dfs(board, i-1, j, word, pos+1), b2 = dfs(board, i+1, j, word, pos+1);
bool b3 = dfs(board, i, j-1, word, pos+1), b4 = dfs(board, i, j+1, word, pos+1);
visit[i][j] = 0;//递归回溯
return b1 || b2 || b3 || b4;
}
public:
bool exist(vector<vector<char>>& board, string word) {
int M = board.size(), N = board[0].size();
visit.resize(M, vector<int>(N));
for(int i = 0;i < M;++i)
{
for(int j = 0;j < N;++j)
{
if(dfs(board,i,j,word,0))
{
return true;
}
}
}
return false;
}
};
--------2021-05-12-------------------
重做后发现了一个神奇的事,就是方向矩阵如果用二维的话就会超时,改成一维的pair就没有问题,emmmm
/*
执行用时:324 ms, 在所有 C++ 提交中击败了53.55%的用户
内存消耗:7.3 MB, 在所有 C++ 提交中击败了30.22%的用户
*/
class Solution {
// vector<vector<int>> dic = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
vector<pair<int, int>> dic{{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
bool dfs(vector<vector<char>>& board, vector<vector<int>>& visit, string& word, int i, int j, int index)
{
if(board[i][j] != word[index])
{
return false;
}
else if(index == word.size() - 1)
return true;
char tmp = board[i][j];
visit[i][j] = 1;//标记已访问
int M = board.size(), N = board[0].size();
bool ans = false;
for(auto x : dic)
{
int ti = i + x.first, tj = j + x.second;
if(ti >= 0 && ti < M && tj >= 0 && tj < N && !visit[ti][tj])
{
if(dfs(board, visit, word, ti, tj, index + 1))
{
ans = true;
break;
}
}
}
visit[i][j] = 0;
return ans;
}
public:
bool exist(vector<vector<char>>& board, string word) {
int M = board.size(), N = board[0].size();
if(word.empty())
return false;
vector<vector<int>> visit(M, vector<int>(N, 0));
for(int i = 0;i < M;++i)
{
for(int j = 0;j < N;++j)
{
if(board[i][j] == word[0] && dfs(board, visit, word, i, j, 0))
return true;
}
}
return false;
}
};

1969

被折叠的 条评论
为什么被折叠?



