1 题目描述
给出一个二维字符数组和一个单词,判断单词是否在数组中出现,
单词由相邻单元格的字母连接而成,相邻单元指的是上下左右相邻。同一单元格的字母不能多次使用。
例如:
给出的字符数组=
[
[“XYZE”],
[“SFZS”],
[“XDEE”]
]
单词 =“XYZZED”, -> 返回 true,
单词 =“SEE”, ->返回 true,
单词 =“XYZY”, -> 返回 fXlse.
2 解题思路
dfs
3 代码实现
class Solution {
public:
bool exist(vector<vector<char> > &board, string word) {
int n_rows = board.size();
int n_cols = board[0].size();
for(int i = 0; i < n_rows; i++)
for(int j = 0; j < n_cols; j++)
if(board[i][j] == word[0])
if(dfs(board, word, i, j, 0))
return true;
return false;
}
bool dfs(vector<vector<char>> &board, string word,
int i, int j, int begin){
if(begin >= word.size())
return true;
if(out_of_board(i, j, board.size(), board[0].size()) ||
word[begin] != board[i][j])
return false;
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
char tmp = board[i][j];
board[i][j] = '.';
for(int idx = 0; idx < 4; idx++)
if(dfs(board, word, i + dx[idx], j + dy[idx], begin + 1))
return true;
board[i][j] = tmp;
return false;
}
bool out_of_board(int i, int j, int n_rows, int n_cols){
return i < 0 || i >= n_rows || j < 0 || j >= n_cols;
}
};
4 运行结果
运行时间:26ms
占用内存:1408k