题目:

分析:
这题可以通过递归来解决,到了一个新的节点就通过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);
}
}
}
}
本博客介绍如何使用递归解决LeetCode 797题,找到图中从源节点到目标节点的所有可能路径。通过在递归过程中收集路径并确保每个路径的独立性来实现。
1054

被折叠的 条评论
为什么被折叠?



