输入:board = [[“A”,”B”,”C”,”E”],[“S”,”F”,”C”,”S”],[“A”,”D”,”E”,”E”]], word = “ABCCED” 输出:true
示例 2:
输入:board = [[“A”,”B”,”C”,”E”],[“S”,”F”,”C”,”S”],[“A”,”D”,”E”,”E”]], word = “SEE” 输出:true
示例 3:
输入:board = [[“A”,”B”,”C”,”E”],[“S”,”F”,”C”,”S”],[“A”,”D”,”E”,”E”]], word = “ABCB” 输出:false
提示:
m == board.length
n = board[i].length
1 <= m, n <= 6
1 <= word.length <= 15
board 和 word 仅由大小写英文字母组成
class Solution {
private:
// A
// A
// A
// AS
// AB
//
bool dfs(vector<vector<char>>& board, int m, int n, int index, const string &word)
{
if (m < 0 || n < 0 || m > board.size() - 1 || n > board[0].size()-1 || word[index] != board[m][n])
return false;
if (index + 1 == word.size())
{
return true;
}
// std::cout << m << "," << n << std::endl;
// std::cout << cur_res << std::endl;
// std::cout << board[m][n] << std::endl;
board[m][n] = '\0';
if (dfs(board, m - 1, n, index + 1, word)||
dfs(board, m, n - 1, index + 1, word)||
dfs(board, m + 1, n, index + 1, word)||
dfs(board, m, n + 1, index + 1, word))
return true;
board[m][n] = word[index];
return false;
}
public:
bool exist(vector<vector<char>>& board, string word) {
for (auto i = 0; i < board.size(); ++i)
{
for (auto j = 0 ; j < board[0].size(); ++j)
{
if(dfs(board, i, j, 0, word))
return true;
}
}
return false;
}
};
发表回复