LeetCode 797. All Paths From Source to Target(所有可能的路径)

本博客介绍如何使用递归解决LeetCode 797题,找到图中从源节点到目标节点的所有可能路径。通过在递归过程中收集路径并确保每个路径的独立性来实现。

题目:
在这里插入图片描述
分析:
这题可以通过递归来解决,到了一个新的节点就通过graph数组查找它可以到达的下一个节点然后递归这些节点,在这个过程中不断把遍历到的节点添加到ArrayList中,找到目标节点后,把ArrayList添加到这个ArrayListAll中,ArrayListAll的需要在方法中传递,而ArrayList在递归调用前需要先copy一份,确保每个递归路径持有引用独立的ArrayList。
代码实现:

class Solution {		
    public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
        int dest=graph.length-1;
        ArrayList<Integer> arrayList=new ArrayList<>();
        ArrayList<List<Integer>> arrayListAll=new ArrayList<>();        
        find(arrayList, arrayListAll, graph,0,dest);
        return arrayListAll;
    }    
    public void find(ArrayList<Integer> arrayList,ArrayList<List<Integer>> arrayListAll,int[][] graph,int num,int dest){
    	if(num==dest){
    		arrayList.add(num);
    		arrayListAll.add(arrayList);
    	}else{
    		for(int i=0;i<graph[num].length;i++){
    			ArrayList<Integer> arrayListClone=(ArrayList<Integer>) arrayList.clone();
    			arrayListClone.add(num);
    			find(arrayListClone, arrayListAll, graph, graph[num][i],dest);
    		}
    	}
    }        
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值