首页 > 其他 > 详细

[LeetCode] 797. All Paths From Source to Target

时间:2020-07-25 11:46:32      阅读:80      评论:0      收藏:0      [点我收藏+]

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.

所有可能的路径。这个题是一道比较典型的把回溯backtracking应用到图的题目。既然是是找all possible paths,所以会想到类似DFS/backtracking的思路。面试遇到了不能做不出来啊。。。(# ̄~ ̄#)

base case是当前遍历到graph里面的最后一个节点,则把当前list的结果加入结果集;其他部分则是跟其他经典的回溯类型的题没有区别

时间O(n)

空间O(n)

Java实现

 1 class Solution {
 2     public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
 3         List<List<Integer>> res = new ArrayList<>();
 4         List<Integer> path = new ArrayList<>();
 5         path.add(0);
 6         dfs(graph, 0, res, path);
 7         return res;
 8     }
 9     
10     private void dfs(int[][] graph, int index, List<List<Integer>> res, List<Integer> path) {
11         // base case
12         if (index == graph.length - 1) {
13             res.add(new ArrayList<>(path));
14             return;
15         }
16         for (int next : graph[index]) {
17             path.add(next);
18             dfs(graph, next, res, path);
19             path.remove(path.size() - 1);
20         }
21     }
22 }

 

LeetCode 题目总结

[LeetCode] 797. All Paths From Source to Target

原文:https://www.cnblogs.com/cnoodle/p/13375308.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!