矩阵中的路径
矩阵中的路径
https://www.nowcoder.com/practice/c61c6999eecb4b8f88a98f66b273a3cc?tpId=13&tqId=11218&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&tab=answerKey
直接使用回溯,用双重for循环,以每一个点为起点,去向四面走,找到符合条件的路径。走过的点用数组进行标记。
public class Solution { public boolean hasPath(char[] matrix, int rows, int cols, char[] str) { int[] flag = new int[matrix.length]; for(int i = 0; i < rows; i++){ for(int j = 0; j < cols; j++){ if(helper(matrix,rows,cols,i,j,flag,0,str)) return true; } } return false; } public boolean helper(char[] matrix, int rows, int cols, int i, int j, int[] flag, int len, char[] str){ int index = cols*i+j; // 计算得到当前点在matrix的位置 if(i<0 || i>=rows || j<0 || j>=cols || matrix[index]!=str[len] || flag[index] == 1) /*超出范围,这个点不是我们想要的,或者这个点已经走过了,就不能再走了,直接返回false*/ return false; // 长度相等的时候,就证明找到了 if(len == str.length-1) return true; flag[index] = 1; // 标记为已经走过了 /*找到任何一条路径就够了*/ if(helper(matrix,rows,cols,i-1,j,flag,len+1,str) || helper(matrix,rows,cols,i,j-1,flag,len+1,str) || helper(matrix,rows,cols,i+1,j,flag,len+1,str) || helper(matrix,rows,cols,i,j+1,flag,len+1,str)) return true; flag[index] = 0; //撤销已经走过的点 return false; } }
剑指offer 文章被收录于专栏
为刷过的每一道题都书写一篇题解,便于重复练习~