[剑指offer]矩阵中的路径

来源:互联网 发布:qq的smtp端口号 编辑:程序博客网 时间:2024/05/31 13:15
public class Solution {public boolean hasPath(char[] matrix, int rows, int cols, char[] str) {//为空情况if (matrix.length == 0 || str.length == 0) {return false;}//是否访问过 默认falseboolean[] visited = new boolean[matrix.length];int pathlength = 0;//字串下标//双重循环检测for (int row = 0; row < rows; row++) {for (int col = 0; col < cols; col++) {if (hasPathCore(matrix, rows, cols, row, col, str, pathlength, visited)) {return true;}}}return false;}public boolean hasPathCore(char[] matrix, int rows, int cols, int row, int col, char[] str, int pathlength,boolean[] visited) {int index = row * cols + col;//长字符串下标if (pathlength == str.length)return true;//越界返回true 越界说明找到 访问完了if (row < 0 || row >= rows || col < 0 || col >= cols || matrix[index] != str[pathlength]|| visited[index] == true)return false;//查找失败返回falsevisited[index] = true;//标记访问过//访问上下左右 递归回溯if (hasPathCore(matrix, rows, cols, row, col - 1, str, pathlength + 1, visited)|| hasPathCore(matrix, rows, cols, row, col + 1, str, pathlength + 1, visited)|| hasPathCore(matrix, rows, cols, row - 1, col, str, pathlength + 1, visited)|| hasPathCore(matrix, rows, cols, row + 1, col, str, pathlength + 1, visited)) {return true;}//失败退回上一个visited[index] = false;return false;}}

原创粉丝点击