【Codewars-Pyramid Slide Down】(下三角矩阵求最长路径)

在刷Codewars的时候,发现了其中有这道题,感觉大神的解法很巧妙,记录下来,希望自己以后需要的时候能快速找到吧。
【题目1】
大致就是需要找到下三角矩阵的一个最长路径吧。
【解法】
无非还是动态规划的方法,每个点只能走到该节点下方节点或者下方节点的右节点。
这里贴出大神的解法吧,自己的解法确实感觉不如别人的巧妙。

def longest_slide_down(p):
    res = p.pop()#感觉这个pop操作很是精彩,虽然可能破坏了原来的数组
    while p:
        tmp = p.pop()
        res = [tmp[i] + max(res[i],res[i+1])  for i in range(len(tmp))] 
    return res.pop()

【题目2】
寻找矩阵的最小路径。
【解法】
仿照上一个也采用pop的方法来处理矩阵。
然后采用滚动数组的方法来解决吧。

def getMin(self, mmap, n, m):#mmap为矩阵,n为行数,m为列数
        tmp = mmap.pop(0)
        res = [0]*len(tmp)
        res[0] = tmp[0]
        for i in range(1,len(tmp)):
            res[i] = tmp[i]+res[i-1]
        while mmap:
            s = mmap.pop(0)
            res[0] = res[0]+s[0]
            for i in range(1,len(s)):
                res[i] = s[i] + min(res[i],res[i-1])
        return res[-1] 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值