931. Minimum Falling Path Sum
package LeetCode_931 /** * 931. Minimum Falling Path Sum * https://leetcode.com/problems/minimum-falling-path-sum/ * * Given a square array of integers A, we want the minimum sum of a falling path through A. A falling path starts at any element in the first row, and chooses one element from each row. The next row's choice must be in a column that is different from the previous row's column by at most one. Example 1: Input: [ [1,2,3], [4,5,6], [7,8,9] ] Output: 12 Explanation: The possible falling paths are: [1,4,7], [1,4,8], [1,5,7], [1,5,8], [1,5,9] [2,4,7], [2,4,8], [2,5,7], [2,5,8], [2,5,9], [2,6,8], [2,6,9] [3,5,7], [3,5,8], [3,5,9], [3,6,8], [3,6,9] The falling path with the smallest sum is [1,4,7], so the answer is 12. Constraints: 1. 1 <= A.length == A[0].length <= 100 2. -100 <= A[i][j] <= 100 * */ class Solution { /* * solution : DP, Bottom-Up, for example array is: * [ [1,2,3], [4,5,6], [7,8,9] ] fill new value from second row, the value of current i,j is: current value + min(A[i-1][j], A[i-1][j+1]) [1,2,3], [5,6,8],//<-this row after fill by: 4+min(1,2), 5+min(1,min(2,3)), 6+min(2,3) [12,13,15],//<-this row after fill by: 7+min(5,6), 8+min(5,min(6,8)), 9+min(6,8) result is minimum in last row Time complexity:O(nn), Space complexity:O(1) * */ fun minFallingPathSum(A: Array<IntArray>): Int { if (A == null || A.isEmpty()) { return 0 } val n = A.size if (n == 1) { return A[0][0] } for (i in 1 until n) {//start from second row for (j in 0 until n) { if (j == 0) { A[i][j] += Math.min(A[i - 1][j], A[i - 1][j + 1]) } else if (j == n - 1) { A[i][j] += Math.min(A[i - 1][j - 1], A[i - 1][j]) } else { A[i][j] += Math.min(A[i - 1][j - 1], Math.min(A[i - 1][j + 1], A[i - 1][j])) } } } var result = Int.MAX_VALUE for (cols in 0 until n) { result = Math.min(result, A[n - 1][cols]) } return result } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)