LeetCode 797. All Paths From Source to Target

原题链接在这里:https://leetcode.com/problems/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:
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.

题解:

Could use DFS to iterate from 0 to n - 1.

DFS state needs graph, current node, end node, current list item and res. It doesn't need to return anything, thus void.

Time Complexity: O(V + E). V = graph.length. E is all  the edges.

Space: O(E). stack space.

AC Java:

 1 class Solution {
 2     public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
 3         List<List<Integer>> res = new ArrayList<>();
 4         if(graph == null ||graph.length == 0){
 5             return res;
 6         }
 7         
 8         List<Integer> item = new ArrayList<Integer>();
 9         item.add(0);
10         dfs(graph, 0, graph.length - 1, item, res);
11         return res;
12     }
13     
14     private void dfs(int [][] graph, int cur, int end, List<Integer> item, List<List<Integer>> res){
15         if(cur == end){
16             res.add(new ArrayList<Integer>(item));
17             return;
18         }
19         
20         for(int neigh : graph[cur]){
21             item.add(neigh);
22             dfs(graph, neigh, end, item, res);
23             item.remove(item.size() - 1);
24         }
25     }
26 }
原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/12324669.html