不确定第一个字母的初始位置,遍历寻找一遍,找到初始位置,设置访问数组,通过一系列条件判断
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * @param matrix char字符型二维数组 * @param word string字符串 * @return bool布尔型 */ public boolean hasPath (char[][] matrix, String word) { // write code here if(matrix.length==0 || word==null){ return false; } int row=matrix.length; int col=matrix[0].length; int[][] flag=new int[row][col]; char[] str=word.toCharArray(); for(int i=0;i<row;i++){ for(int j=0;j<col;j++){ if(search(matrix,i,j,word,flag,0)){ return true; } } } return false; } /** * @param matrix 字符矩阵 * @param rows 矩阵行数 * @param cols 矩阵列数 * @param i 当前行索引 * @param j 当前列索引 * @param str 目标字符序列 * @param index 目标字符序列中当前字符索引 * @param flag 字符矩阵是否被访问过标记 **/ public static boolean search(char[][] matrix,int i,int j,String word,int[][] flag,int index){ int rows=matrix.length; int cols=matrix[0].length; //行列索引超限、当前字符已经被访问过、当前字符不等于目标字符序列的当前字符,直接返回false if(i<0||j<0||i>=rows||j>=cols||flag[i][j]==1||matrix[i][j]!=word.charAt(index)){ return false; } if(index==word.length()-1){//递归结束条件,已经到达最后一个字符了; return true; } flag[i][j]=1;//设置访问标记 // 在当前字符的上、下、左、右的元素搜索下一个目标字符,递归 if(search(matrix,i+1,j,word,flag,index+1) || search(matrix,i-1,j,word,flag,index+1)|| search(matrix,i,j+1,word,flag,index+1)|| search(matrix,i,j-1,word,flag,index+1) ){ return true; } flag[i][j]=0; return false; } }