[leetcode] problem 797 – all paths from source to target

Given a directed, acyclic graph of N nodes. Find all possible paths from node 0 to node N-1, and return them in any order.

The graph is given as follows: the nodes are 0, 1, …, graph.length - 1. graph[i] is a list of all nodes j for which the edge (i, j) exists.

Example

Input: [[1,2], [3], [3], []]

Output: [[0,1,3],[0,2,3]]

Explanation: The graph looks like this:

1
2
3
4
0--->1
| |
v v
2--->3

There are two paths: 0 -> 1 -> 3 and 0 -> 2 -> 3.

Note

  • The number of nodes in the graph will be in the range [2, 15].
  • You can print different paths in any order, but you should keep the order of nodes inside one path.

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
List<List<Integer>> paths = new ArrayList<>();
List<Integer> path = new ArrayList<>();
path.add(0);
findPath(paths, path, graph, 0);
return paths;
}

private void (List<List<Integer>> paths, List<Integer> path, int[][] graph, int node) {
if (node == graph.length - 1) {
paths.add(new ArrayList<>(path));
return;
}

for (int nextNode : graph[node]) {
path.add(nextNode);
findPath(paths, path, graph, nextNode);
path.remove(path.size() - 1);
}
}