力扣每日一题2021.08.25所有可能的路径


797.所有可能的路径

题目描述

给你一个有n个节点的有向无环图(DAG),请你找出所有从节点0到节点n-1的路径并输出(不要求按特定顺序)
二维数组的第i个数组中的单元都表示有向图中i号节点所能到达的下一些节点,空就是没有下一个节点了。
有向图是有方向的,规定了从a→b就不能从b→a。


示例1

示例1
输入:graph = [[1, 2], [3], [3], []]
输出:[[0, 1, 3], [0, 2, 3]]
解释:有两条路径0→1→3和0→2→3


示例2

示例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]]


提示

  • 0 == graph.length
  • 2 <= n <= 15
  • 0 <= graph[i][j] < n
  • graph[i][j] != i(即,不存在自环)
  • graph[i]中的所有的元素互不相同
  • 保证输入为有向无环图(DAG)

思路:DFS+记忆化

DFS+记忆化

从起点开始,往可以通向的每个点都走一遍到终点,另外需要加一个判断是以n-1结点为终点,这样才是正确的结果。
DFS+记忆化

class Solution:
    def allPathsSourceTarget(self, graph: List[List[int]]) -> List[List[int]]:
        n = len(graph)
        @lru_cache(None)
        def dfs(node):
            if node == n-1:
                return [[n-1]]
            ans = []
            for nxt in graph[node]:
                for res in dfs(nxt):
                    ans.append([node] + res)
            return ans
        return dfs(0)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值