当 board[i][j] 的值不等于 word[k] 时,说明当前方向已经不可能有和 word 相等的了,因此也返回 false;
当 k 的值等于 word 的长度减一时(word 从 0 开始计数),说明已经找到和 word 相等的字符,返回 true。
设置 board[i][j] 标记,该标记用来记录此次搜索该位置已经搜索过了(题目要求同一单元格内的字母不允许被重复使用),可以使用 word 中一定不会有的字符,如:‘\0’;
递归的判断四个方向:上下左右
还原 board[i][j] 位置的值。
代码
class Solution {
public:
bool exist(vector<vector<char>>& board, string word){
row = board.size();
column = board[0].size();for(int i =0; i < row;++i){for(int j =0; j < column;++j){if(dfs(board, word, i, j,0)){return true;}}}return false;}
private:int row, column;
bool dfs(vector<vector<char>>& board, string word,int r,int c,int k){if(r <0|| r == row || c <0|| c == column || word[k]!= board[r][c]){return false;}if(k == word.size()-1){return true;}
board[r][c]='\0';
bool res =dfs(board, word, r -1, c, k +1)||dfs(board, word, r +1, c, k +1)||dfs(board, word, r, c -1, k +1)||dfs(board, word, r, c +1, k +1);
board[r][c]= word[k];return res;}};