Given a 2D board and a word, find if the word exists in the grid.
The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.
For example,
Given board =
[ ["ABCE"], ["SFCS"], ["ADEE"] ]word =
"ABCCED"
, -> returns true
,word =
"SEE"
, -> returns true
,word = "ABCB"
, -> returns false
.
class Solution {
public:
bool exist(vector<vector<char>>& board, string word)
{
//遍历二维矩阵
//求行
//求列
int row=board.size();//row
int col=board[0].size();//col
if(row<=0||col<=0) return false;
if(word.size()==0) return true;
//要查找的字符第一个char
char fch=word.at(0);
//在数组中寻找第一个字符
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
{
if(board[i][j]==fch)
{ board[i][j]=' ';
if(dfs(board,word.substr(1),i,j)) return true;
board[i][j]=fch;
}
}
return false;
}
bool dfs(vector<vector<char>> &board,string word,int a,int b)
{
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int row=board.size();//row
int col=board[0].size();//col
if(word.size()==0) return true;
for(int i=0;i<4;i++)
{
int x=a+dir[i][0];
int y=b+dir[i][1];
if(x>=0&&x<row&&y>=0&&y<col&&board[x][y]==word.at(0))
//得先判断x,y是否越界;
{
board[x][y]=' ';
if(dfs(board,word.substr(1),x,y)) return true;
board[x][y]=word.at(0);
}
}
return false;
}
};