题目链接
注意点
- 尽量减少函数参数的个数,而且最好使用引用,否则速度会慢很多
解法
解法一:典型的dfs。从开头的字母开始,往四周寻找下一个字母,如果没有匹配的就返回false。根据短路特性找到一个匹配的之后就会继续访问下去。
class Solution {
public:
bool dfs(vector<vector<char>>& board,string& word,int index,int x,int y)
{
if(index == word.size()) return true;
if(x < 0 || y < 0 || x >= board.size() || y >= board[0].size() || board[x][y] != word[index] ) return false;
bool res = false;
char temp = board[x][y];
board[x][y] = '*';
res = dfs(board,word,index+1,x,y+1) ||
dfs(board,word,index+1,x,y-1) ||
dfs(board,word,index+1,x+1,y) ||
dfs(board,word,index+1,x-1,y);
board[x][y] = temp;
return res;
}
bool exist(vector<vector<char>>& board, string word) {
if(word.size() == 0) return true;
if(board.size() == 0) return false;
int i,j,m = board.size(),n = board[0].size();
for(i = 0;i < m;i++)
{
for(j = 0;j < n;j++)
if(board[i][j] == word[0]) if(dfs(board,word,0,i,j)) return true;
}
return false;
}
};
小结
- dfs。