class Solution {
public:
unsigned int len1, len2;
bool exist(vector<vector<char>>& board, string word) {
len1 = board.size();
if(len1 == 0) return false;
len2 = board[0].size();
if(len2 == 0) return false;
vector<vector<int>> visited(len1, vector<int>(len2, 0));
for(int i = 0; i < len1; i++) {
for(int j = 0; j < len2; j++) {
if(helper(board, i, j, word, 0, visited)) {
return true;
}
}
}
return false;
}
private:
bool helper(vector<vector<char>>& board, int row, int col, string word, int k, vector<vector<int>>& visited) {
if(k == word.length() - 1) {
return board[row][col] == word[k];
}
//方向数组
int direction[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
if(board[row][col] == word[k]) {
visited[row][col] = 1;
for(int i = 0; i < 4; i++) {
int dx = row + direction[i][0];
int dy = col + direction[i][1];
if(dx >= 0 && dx < len1 && dy >= 0 && dy < len2 && !visited[dx][dy]) {
if(helper(board, dx, dy, word, k + 1, visited)) {
return true;
}
}
}
visited[row][col] = 0;
}
return false;
}
};
剑指 Offer 12. 矩阵中的路径
最新推荐文章于 2020-09-19 22:01:29 发布