LeetCode 797:所有可能的路径

导读:本篇文章讲解 LeetCode 797:所有可能的路径,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

链接

题目:
在这里插入图片描述

思路:

反复利用path去记录路径,一旦到达末尾,将path的最后一个值删去,再用new LinkedList(path) 新建一个对象存入结果

注意:
由于该图是无环的,不需要maiked 数组来标记每个是否访问过;
每个路径结束都要向List<List< Integer >>中存入一个List< Integer >对象,每次需要new出来 !LinkedList<>的有参构造可以方任意Collection的子类
在这里插入图片描述
题目规定了只从顶点0开始,所以只有一个for去遍历顶点0的邻接表;
removeLast() 是LinkedList的方法, 所以不能使用List<Integer> path=new LinkedList<>();去创建path !由于静态绑定,List没有removeLast方法,所以编译不通过。

Java实现:

class Solution {
    List<List<Integer>> r=new LinkedList<>();
    public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
        //graph是邻接表,每个元素是一个数组,存有该顶点相连的其他顶点
        LinkedList<Integer> path=new LinkedList<>(); //多态,LinkedList才有removerLast()方法!
        traverse(graph,0,path);
        return r;
    }
        void traverse(int[][]graph,int s,LinkedList<Integer> path){
            path.add(s); // 先添加起始节点
            //判断是否迭代到头了,是则完成一个路径
            int n=graph.length;
            if(s==n-1){
                r.add(new LinkedList<>(path)); // 传进来只有一个path对象,而r中要有多个List对象 ! 每个路径需要new一个List对象 !
                path.removeLast();//递归完成,移除path中元素,
                return;
            }
            //dfs
            for(int k :graph[s]){ // 遍历当前节点s的邻接表
                traverse(graph,k,path);
            }
            path.removeLast(); //递归完成,移除path中元素,
        } 
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/89267.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!