美文网首页
三角形最小路径和这道题怎么做啊?

三角形最小路径和这道题怎么做啊?

作者: 叮宕 | 来源:发表于2018-06-10 16:24 被阅读109次

题目

给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。
例如,给定三角形:
[
     [2],
    [3,4],
   [6,5,7],
  [4,1,8,3]
]
自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。

我能立刻想到的是,f(n,m)代表从(n,m)这个位置走到最后一行的最小路径和。那么
f(n,m)=min(f(n+1,m),f(n+1,m+1))+triangle[n][m]
这个很好理解,就是先找出m,n这个位置的下面两条路哪个最小,然后加上自己的距离就好。

class Solution:
    def sumPath(self,n,m,triangle):
       if n<len(triangle)-1:
             return min([self.sumPath(n+1,m,triangle),self.sumPath(n+1,m+1,triangle)])+triangle[n][m]          
       else:
             
             return triangle[n][m]
            
    def minimumTotal(self, triangle):
        """
        :type triangle: List[List[int]]
        :rtype: int
        """
        return self.sumPath(0,0,triangle)

最后返回triangle[n][m]的意思是从triangle[n][m]到它本身的距离是triangle[n][m]

提交了下,显示超时……我知道这个要递归很多层啊,并且python只能处理递归层数不超过998。谁有更好的办法?主要它要求空间复杂度是O(n)。所以思路应该是复用利用最后一行的n个空间。

相关文章

网友评论

      本文标题:三角形最小路径和这道题怎么做啊?

      本文链接:https://www.haomeiwen.com/subject/kkzfeftx.html