首页 > 其他分享 >[leetcode每日一题]7.13

[leetcode每日一题]7.13

时间:2023-07-13 21:02:06浏览次数:31  
标签:mn matrix 7.13 每日 min leetcode range col dp

931. 下降路径最小和

中等

281

相关企业

给你一个 n x n 的 方形 整数数组 matrix ,请你找出并返回通过 matrix 的下降路径  最小和 。

下降路径 可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列(即位于正下方或者沿对角线向左或者向右的第一个元素)。具体来说,位置 (row, col) 的下一个元素应当是 (row + 1, col - 1)(row + 1, col) 或者 (row + 1, col + 1) 。

 

示例 1:

[leetcode每日一题]7.13_dp

输入:matrix = [[2,1,3],[6,5,4],[7,8,9]]
输出:13
解释:如图所示,为和最小的两条下降路径

示例 2:

[leetcode每日一题]7.13_数组_02

输入:matrix = [[-19,57],[-40,-5]]
输出:-59
解释:如图所示,为和最小的下降路径

 

提示:

  • n == matrix.length == matrix[i].length
  • 1 <= n <= 100
  • -100 <= matrix[i][j] <= 100

Solution

比较显然的dp。

class Solution:
    def minFallingPathSum(self, matrix: List[List[int]]) -> int:
        m, n = len(matrix), len(matrix[0])
        col = [[0] * n for _ in range(2)]
        if n == 1:
            return sum(list(*matrix))
        for i in range(m):
            for j in range(n):
                if j == 0:
                    col[(i + 1) % 2][j] = min(col[i % 2][j], col[i % 2][j + 1]) + matrix[i][j]
                elif j == n - 1:
                    col[(i + 1) % 2][j] = min(col[i % 2][j], col[i % 2][j - 1]) + matrix[i][j]
                else:
                    col[(i + 1) % 2][j] = min(col[i % 2][j - 1], col[i % 2][j], col[i % 2][j + 1]) + matrix[i][j]
        return min(col[n % 2])

但是还是学习一下官方题解对于判断分支的写法:

class Solution:
    def minFallingPathSum(self, matrix: List[List[int]]) -> int:
        dp = [matrix[0]]
        n = len(matrix)
        for i in range(1, n):
            cur = [0] * n
            for j in range(n):
                mn = dp[-1][j]
                if j > 0:
                    mn = min(mn, dp[-1][j - 1])
                if j < n - 1:
                    mn = min(mn, dp[-1][j + 1])
                cur[j] = mn + matrix[i][j]
            dp.append(cur)
        return min(dp[-1])

作者:力扣官方题解
链接:https://leetcode.cn/problems/minimum-falling-path-sum/solutions/2338060/xia-jiang-lu-jing-zui-xiao-he-by-leetcod-vyww/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:mn,matrix,7.13,每日,min,leetcode,range,col,dp
From: https://blog.51cto.com/u_15763108/6715966

相关文章

  • 每日汇报 第三周第五天 JAVA集合
    今日所学:掌握Collection接口的常用方法;掌握Set接口的HashSet类和TreeSet类的异同点;掌握如何使用Iterator迭代器遍历集合中的元素;掌握List接口的两个重要方法get(intindex)和set(intindex,Objectobj);掌握Set接口的ArrayList类与LinkedList类的异同点;掌握Map接口的常用方法;......
  • 7.13 周四总结
    今天跟着课程学了循环高级练习如何判断质数和猜数字小游戏。将之前的pta试题写进了实践报告中。完成了大道至简的部分阅读内容。今天暂无问题,明天继续抽出时间进行大道至简的阅读,并根据进度进行数组相关知识的学习。......
  • 2023.07.13
    2023.07.13CF865DBuyLowSellHighCF32EHide-and-SeekCF266DBerDonalds\(O(n^3)\)预处理出任意两个点间的最短距离\(d(u,v)\)。若餐厅定在边\((u,v,w)\)上,且与\(u\)点距离为\(x\),则最远距离为\(\max\limits_{i=1}^{n}(d(u,i)+x,d(v,i)+w-x)\)。取......
  • [LeetCode] 2542. Maximum Subsequence Score
    Youaregiventwo 0-indexed integerarrays nums1 and nums2 ofequallength n andapositiveinteger k.Youmustchoosea subsequence ofindicesfrom nums1 oflength k.Forchosenindices i0, i1,..., ik-1,your score isdefinedas:Thes......
  • leetcode-20. 有效的括号
    https://leetcode.cn/problems/valid-parentheses/20.有效的括号给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。示例1......
  • LeetCode —— 子串
    560. 和为K的子数组(哈希表)官方题解:https://leetcode.cn/problems/subarray-sum-equals-k/solution/he-wei-kde-zi-shu-zu-by-leetcode-solution/假设left到right下标的子数组和为knums[left...right]=kpreSum[right]-preSum[left]=kpreSum[left]=preSum[rig......
  • 每日总结2023年7月12日
    今日学习:信息系统安全属性:保密性(最小授权原则、防暴露、信息加密、物理保密)、完整性(安全协议、校验码、密码校验、数字签名、公证)、可用性(综合保障(IP过滤、业务流控制、路由选择控制、审计跟踪))、不可抵赖性(数字签名);对称加密技术:加密和解密的密钥是完全一致的(加密强度不高、密钥分......
  • Leetcode - 动态规划总结(必看!!!)
     一、labuladong动态规划模板思路wiki:https://labuladong.gitee.io/algo/di-ling-zh-bfe1b/dong-tai-g-1e688/题目: 动态规划模板思路: 二、我自己如何理解【状态】【选择】 以714题目《最佳时机去买卖股票+手续费》为例子:1.确定【状态】--寻找原问题和子问题中,......
  • LeetCode 剑指 Offer 11. 旋转数组的最小数字
    题目链接:LeetCode剑指Offer11.旋转数组的最小数字题意:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [......
  • LeetCode 剑指 Offer 12. 矩阵中的路径
    题目链接:LeetCode剑指Offer12.矩阵中的路径题意:给定一个 mxn二维字符网格 board和一个字符串单词 word。如果 word存在于网格中,返回true;否则,返回false。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元......