题解 | #矩阵中的路径#
矩阵中的路径
http://www.nowcoder.com/practice/2a49359695a544b8939c77358d29b7e6
递归参数:当前元素在矩阵中的行列索引i和j,当前目标字符在word中的索引k。
终止条件:
返回false:
(1)行或列索引越界
(2)当前矩阵元素与目标字符不同
(3)当前矩阵元素已访问过
返回 true: k = len(word) - 1 ,即字符串 word 已全部匹配。
递推工作:
标记当前矩阵元素: 将 board[i][j] 修改为空字符 '' ,代表此元素已访问过,防止之后搜索时重复访问。
搜索下一单元格:朝当前元素的 上、下、左、右 四个方向开启下层递归,使用或连接,并记录结果至res 。
还原当前矩阵元素:将board[i][j] 元素还原至初始值,即 word[k]。
返回值: 返回布尔量 res ,代表是否搜索到目标字符串。
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param matrix char字符型vector<vector<>>
* @param word string字符串
* @return bool布尔型
*/
bool hasPath(vector<vector<char>>& matrix, string word) {
if(matrix.size()==0)return false;
int row=matrix.size(),col=matrix[0].size();
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
if(dfs(matrix,word,i,j,0))
return true;
}
}
return false;
}
bool dfs(vector<vector<char>>&mat,string word,int i,int j,int k){
if(i<0||j<0||i>=mat.size()||j>=mat[0].size()||mat[i][j]!=word[k])
return false;
if(k==word.size()-1)
return true;
mat[i][j]='\0';
bool flag=dfs(mat,word,i+1,j,k+1)||dfs(mat,word,i,j+1,k+1)||dfs(mat,word,i-1,j,k+1)||dfs(mat,word,i,j-1,k+1);
mat[i][j]=word[k];
return flag;
}
};链接:https://leetcode-cn.com/problems/ju-zhen-zhong-de-lu-jing-lcof/solution/mian-shi-ti-12-ju-zhen-zhong-de-lu-jing-shen-du-yo/
来源:力扣(LeetCode)
海康威视公司福利 1125人发布
查看20道真题和解析