108th LeetCode Weekly Contest Minimum Falling Path Sum
Posted 樱花落舞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了108th LeetCode Weekly Contest 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
.
Note:
1 <= A.length == A[0].length <= 100
-100 <= A[i][j] <= 100
大概都知道求矩阵的最小和,这里不过是规则变了(需要是向下且不同行)
那个dp[i][j]可能从正上方,或者是右上,左上 + A[i][j]得来,考虑边界
class Solution { public: int minFallingPathSum(vector<vector<int>>& A) { if(A.size() == 0) return 0; int inf = 100000; int n = A.size(); vector<vector<int>> dp(n + 10, vector<int>(n + 10, inf)); for (int i = 0; i <= n; ++i) dp[0][i] = A[0][i]; for (int i = 1; i < n; ++i) { for (int j = 0; j < n; ++j) { if (j > 0) dp[i][j] = min(dp[i][j], dp[i - 1][j - 1] + A[i][j]); if (j + 1 < n) dp[i][j] = min(dp[i][j], dp[i - 1][j + 1] + A[i][j]); dp[i][j] = min(dp[i][j], dp[i - 1][j] + A[i][j]); } } int ret = inf; for (int x : dp[n - 1]) ret = min(ret, x); return ret; } };
以上是关于108th LeetCode Weekly Contest Minimum Falling Path Sum的主要内容,如果未能解决你的问题,请参考以下文章
123th LeetCode Weekly Contest Broken Calculator
118th LeetCode Weekly Contest Pancake Sorting
113th LeetCode Weekly Contest Flip Equivalent Binary Trees
113th LeetCode Weekly Contest Reveal Cards In Increasing Order