leetcode.所有可能的路径(python)

找到从节点0到n-1的所有路径,肯定是用dfs算法,不过有两种思考方式:

一种是:从后往前考虑。如果这条路能到n-1节点,那么dfs返回一个rec列表,里面存路径。

class Solution:
    def allPathsSourceTarget(self, graph: List[List[int]]) -> List[List[int]]:
        end = len(graph)-1
        def dfs(node):
            if node == end: return [[node]]
            rec = []
            for nex in graph[node]:
                ans = dfs(nex)
                for ls in ans:
                    rec.append([node] + ls)
            return rec if rec else []

        return dfs(0)

rec里面有路径,表明能走,如果是[],说明没路。

另一种是:从前往后考虑。rec代表的是当前dfs走过的节点,遍历到哪个节点就加进rec尾部,退出哪个dfs,就把当前节点弹出。

class Solution:
    def allPathsSourceTarget(self, graph: List[List[int]]) -> List[List[int]]:
        ans = []
        rec = []
        end = len(graph) - 1
        def dfs(node):
            rec.append(node)
            if node == end:
                ans.append(rec[:])
            for nex in graph[node]:
                dfs(nex)
            rec.pop()
    
        dfs(0)
        return ans

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值