解题思路:
这道题考察的是图的遍历,与N叉树的遍历很相似。
path 是每次递归,记录路径的list,想象一下遍历树的时候,到达根节点,我们要向上遍历…, path是维护这个过程的list。
res 是记录最后输出路径的list。
class Solution {
//记录所有路径
List<List<Integer>> res = new LinkedList<>();
public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
//记录递归中经过的路径
LinkedList<Integer> path = new LinkedList<>();
traverse(graph, 0, path);
return res;
}
void traverse(int[][]graph, int s, LinkedList<Integer>path){
//记录经过的节点s
path.add(s);
int n = graph.length;
//到达终点,加入这一段Path的list
if(s == n - 1){
res.add(new LinkedList<>(path)); //每次添加path时候,拷贝新的列表。
path.removeLast();
return;
}
//递归每个相邻节点
for(int v : graph[s]){
traverse(graph, v, path);
}
//从路径移出节点s,想一下树的遍历,后续遍历维护节点路径
path.removeLast();
}
}