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:

class Solution {
    public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
        List<List<Integer>> res = new ArrayList<>();
        if(graph == null ||graph.length == 0){
            return res;
        }
        
        List<Integer> item = new ArrayList<Integer>();
        item.add(0);
        dfs(graph, 0, graph.length - 1, item, res);
        return res;
    }
    
    private void dfs(int [][] graph, int cur, int end, List<Integer> item, List<List<Integer>> res){
        if(cur == end){
            res.add(new ArrayList<Integer>(item));
            return;
        }
        
        for(int neigh : graph[cur]){
            item.add(neigh);
            dfs(graph, neigh, end, item, res);
            item.remove(item.size() - 1);
        }
    }
}

相关推荐