• 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 }
  • 相关阅读:
    软件杯-题目和插件
    基于《河北省重大技术需求征集系统》的可用性和可修改性战术分析
    基于淘宝网的系统质量属性六大场景
    架构漫谈读后感
    06掌握需求过程阅读笔记之一
    大道至简读后感以及JAVA伪代码
    K8S学习笔记
    事务的七种传播类型、及案例
    香港身份证规则
    oracle函数
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/12324669.html
Copyright © 2020-2023  润新知