LeetCode——797. 所有可能的路徑(Java)
阿新 • • 發佈:2021-08-25
題目描述
題幹: 給你一個有n個節點的 有向無環圖(DAG) 請你找出所有從節點 0到節點 n-1的路徑並輸出(不要求按特定順序) 二維陣列的第 i 個數組中的單元都表示有向圖中 i 號節點所能到達的下一些節點 空就是沒有下一個結點了,有向圖是有方向的,即規定了 a→b 你就不能從 b→a 。 示例1: 輸入:graph = [[1,2],[3],[3],[]] 輸出:[[0,1,3],[0,2,3]] 解釋:有兩條路徑 0 -> 1 -> 3 和 0 -> 2 -> 3 示例2: 輸入:graph = [[4,3,1],[3,2,4],[3],[4],[]] 輸出:[[0,4],[0,3,4],[0,1,3,4],[0,1,2,3,4],[0,1,4]] 示例 3: 輸入:graph = [[1],[]] 輸出:[[0,1]] 示例 4: 輸入:graph = [[1,2,3],[2],[3],[]] 輸出:[[0,1,2,3],[0,2,3],[0,3]] 示例 5: 輸入:graph = [[1,3],[2],[3],[]] 輸出:[[0,1,2,3],[0,3]]
題解思路
返回第一個到最後一個節點的所有路徑,而且這裡的模型是有向無環圖
所以無論用樹還是圖都可以,這裡採用深度優先遍歷的思路,當然廣度也可以
用佇列儲存所有可以到達的路徑,最後返回總的List集合
正確程式碼
class allPathsSourceTargetSolution { List<List<Integer>> ans = new ArrayList<>(); Deque<Integer> stack = new ArrayDeque<>(); public List<List<Integer>> allPathsSourceTarget(int[][] graph) { stack.offerLast(0); dfs(graph, 0, graph.length - 1); return ans; } public void dfs(int[][] graph, int x, int n) { if (x == n) { ans.add(new ArrayList<Integer>(stack)); return; } for (int y : graph[x]) { stack.offerLast(y); dfs(graph, y, n); stack.pollLast(); } } }
總結
這裡需要總結一下Queue的一些常用方法,感興趣大家可以去看我的另一篇總結常用方法的文章
如果文章存在問題或者有更好的題解,歡迎在評論區斧正和評論,各自努力,你我最高處見