这是leetcode的问题。 给定一个2D板和一个单词,找到单词是否存在于网格中。
单词可以由顺序相邻的单元格的字母构成,其中“相邻”的单元格是水平或垂直相邻的单元格。同一字母单元不得重复使用。
我只是简单地检查了给定单词的长度就做了dfs。
class Solution {
public:
int n,m;
bool check(int i,int j){
if(i<0||j<0||i>=n||j>=m)return false;
return true;
}
int ans;
void dfs(vector<vector<char>>& board,string word,int i,int j,int k){
if(!check(i,j) || board[i][j]!=word[k] || board[i][j]=='*')return ;
char x=board[i][j];
board[i][j]='*';
if(k==word.length()-1){
ans=1;
return ;
}
//cout<<s<<endl;
dfs(board,word,i+1,j,k+1);
dfs(board,word,i-1,j,k+1);
dfs(board,word,i,j+1,k+1);
dfs(board,word,i,j-1,k+1);
board[i][j]=x;
}
bool exist(vector<vector<char>>& board, string word) {
n=board.size();m=board[0].size();
ans=0;
int k=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
dfs(board,word,i,j,k);
if(ans==1)return true;
}
}
return ans;
}
};
给定输入的TLE: https://leetcode.com/submissions/detail/243435697/testcase/