程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

剑指OfferII110.所有路径 剑指offer在哪

balukai 2024-12-29 01:13:08 文章精选 11 ℃

题目

给定一个有 n 个节点的有向无环图,用二维数组 graph 表示,请找到所有从 0 到 n-1 的路径并输出(不要求按顺序)。

graph 的第 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]]

提示:n == graph.length

2 <= n <= 15

0 <= graph[i][j] < n

graph[i][j] != i

保证输入为有向无环图 (GAD)

注意:本题与主站 797 题相同:

解题思路分析

1、深度优先搜索;时间复杂度O(2^n*n^2),空间复杂度O(2^n*n)

var res [][]int

func allPathsSourceTarget(graph [][]int) [][]int {
   res = make([][]int, 0)
   dfs(graph, 0, len(graph)-1, make([]int, 0))
   return res
}

func dfs(graph [][]int, cur, target int, path []int) {
   if cur == target {
      path = append(path, cur)
      temp := make([]int, len(path))
      copy(temp, path)
      res = append(res, temp)
      return
   }
   for i := 0; i < len(graph[cur]); i++ {
      dfs(graph, graph[cur][i], target, append(path, cur))
   }
}

总结

Medium题目,题目同leetcode 797.所有可能的路径

Tags:

最近发表
标签列表