这道题给我最大的启示就是不要什么时候都用哈希表,偶尔也要用用数组……
是这样,一开始还沾沾自喜的以为知道了哈希表的自己一定可以比以前傻傻用数组的我要节省空间,结果发现哈希表不能存储pair+用编号存储会时间超限+用数组只需要7*7的空间。
最后好歹也是屈膝用数组过了。
class Solution {
public:
bool exists[7][7];
vector<vector<char>> board;
string word;
bool backtracking(int i,int row,int column){
if(i==word.size()-1) return 1;
exists[row][column]=1;
if(row+1<board.size()&&exists[row+1][column]==0&&word[i+1]==board[row+1][column]&&backtracking(i+1,row+1,column)) return 1;
if(row>0&&exists[row-1][column]==0&&word[i+1]==board[row-1][column]&&backtracking(i+1,row-1,column)) return 1;
if(column+1<board[0].size()&&exists[row][column+1]==0&&word[i+1]==board[row][column+1]&&backtracking(i+1,row,column+1)) return 1;
if(column>0&&exists[row][column-1]==0&&word[i+1]==board[row][column-1]&&backtracking(i+1,row,column-1)) return 1;
exists[row][column]=0;
return 0;
}
bool exist(vector<vector<char>>& board, string word) {
this->board=board;
this->word=word;
memset(exists,0,sizeof(exists));
for(int i=0;i<board.size();i++){
for(int j=0;j<board[i].size();j++){
if(board[i][j]==word[0]&&backtracking(0,i,j)==1) return 1;
}
}
return 0;
}
};