思路
dfs递归
参考了官方题解,官方给了dfs的模板,值得一看。
递归:先写终止条件,再写实现体。
代码
public class Solution { char[] mat; int h; int w; int[] dire=new int[]{-1,0,1,0,-1}; public boolean hasPath(char[] matrix, int rows, int cols, char[] str) { if(str==null||str.length<=0){return false;} mat=matrix; h=rows; w=cols; for(int i=0;i<rows;i++){ for(int j=0;j<cols;j++){ if(dfs(i,j,0,str)){ return true; } } } return false; } public boolean dfs(int i,int j,int pos,char[] str){ if(i<0||i>=h||j<0||j>=w){return false;} char ch=mat[i*w+j]; //判断是否访问或不等位置不匹配 if(ch=='#'||ch!=str[pos]){ return false; } //判断是否匹配到最后一个字符 if(pos==str.length-1){ return true; } mat[i*w+j]='#'; boolean f=false; for(int k=0;k<4;k++){ if(dfs(i+dire[k],j+dire[k+1],pos+1,str)){ return true; } } mat[i*w+j]=ch; return false; } }