美文网首页
LeetCode每日一题 之 矩阵中的路径

LeetCode每日一题 之 矩阵中的路径

作者: ZSACH | 来源:发表于2020-04-27 13:25 被阅读0次

    题目

    image 题目地址

    解题思路

    这道题和之前的一道机器人走格子的算法题很像,都是根据深度优先的回溯方法解题。我们先遍历找到起点位置,再从这个起点位置,向四周深度遍历,一个方向不行,回溯到上一个结点,向其他方向发展。
    这里要注意,起点在矩阵中可能由多个,如果一个起点不行,要接着遍历找下一个起点。

    代码

    public class Solution {
        int rows;
        int cols;
        int length;
        char[] matrix;
        char[] str;
        public boolean hasPath(char[] matrix, int rows, int cols, char[] str)
        {
            if(str.length==0){
                return true;
            }
            this.rows=rows;
            this.cols=cols;
            length=matrix.length;
            this.matrix=matrix;
            this.str=str;
            //找起点
            for(int i=0;i<matrix.length;i++){
                if(matrix[i]==str[0]){
                    //数组存储走过的结点序号,防止重复走
                    ArrayList<Integer> list = new ArrayList<>();
                    list.add(i);
                    //这里如果发现这个起点不能通过,找下一个
                    if(find(i,0,list)){
                        return true;
                    }
                }
            }
            return false;
        }
        
        //找到起点,开始执行深度遍历并回溯
        private boolean find(int index,int k,List list){
            return
            check(index-cols,k+1,list)||
            check(index+cols,k+1,list)||
            check(index+1,k+1,list)||
            check(index-1,k+1,list);
        }
        
        private boolean check(int index,int k,List list){
            if(k == 1 && list.size() > 1){
                //回溯后,清空之前的路径数据
                list = list.subList(0,2);
            }
            if(list.contains(index)){
                //已经走过这个点
                return false;
            }
            if(k >= str.length){
                return true;
            }
            if(str.length > k && !(index < 0 || index >= length)){
                if(str[k] == matrix[index]){
                    //匹配结点,如果匹配,找下一个结点
                    list.add(index);
                    return true && find(index , k ,list);
                }
                return false;
            }else{
                return false;
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:LeetCode每日一题 之 矩阵中的路径

          本文链接:https://www.haomeiwen.com/subject/ueyywhtx.html