⭐️⭐️⭐️
# 題目敘述
Given an n x n
array of integers matrix
, return the minimum sum of any falling path through matrix
.
A falling path starts at any element in the first row and chooses the element in the next row that is either directly below or diagonally left/right. Specifically, the next element from position (row, col)
will be (row + 1, col - 1)
, (row + 1, col)
, or (row + 1, col + 1)
.
# Example 1
Input: matrix = [[2,1,3],[6,5,4],[7,8,9]]
Output: 13
Explanation: There are two falling paths with a minimum sum as shown.
# Example 2
Input: matrix = [[-19,57],[-40,-5]]
Output: -59
Explanation: The falling path with a minimum sum is shown.
# 解題思路
# Solution
class Solution { | |
public int minFallingPathSum(int[][] matrix) { | |
int size = matrix.length; | |
int min = Integer.MAX_VALUE; | |
for (int i = 1; i < size; i++) { | |
for (int j = 0; j < size; j++) { | |
min = matrix[i - 1][j]; | |
if (j > 0) { | |
min = Math.min(matrix[i - 1][j - 1], min); | |
} | |
if (j < size - 1) { | |
min = Math.min(matrix[i - 1][j + 1], min); | |
} | |
matrix[i][j] = matrix[i][j] + min; | |
} | |
} | |
min = Integer.MAX_VALUE; | |
for (int i = 0; i < size; i++) { | |
if (min > matrix[size - 1][i]) { | |
min = matrix[size - 1][i]; | |
} | |
} | |
return min; | |
} | |
} |
#include <bits/stdc++.h> | |
using namespace std; | |
class Solution { | |
public: | |
int minFallingPathSum(vector<vector<int>>& matrix) { | |
int size = matrix.size(); | |
int ans = INT_MAX; | |
for (int i = 1; i < size; i++) { | |
for (int j = 0; j < size; j++) { | |
ans = matrix[i - 1][j]; | |
if (j > 0) { | |
ans = min(matrix[i - 1][j - 1], ans); | |
} | |
if (j < size - 1) { | |
ans = min(matrix[i - 1][j + 1], ans); | |
} | |
matrix[i][j] = matrix[i][j] + ans; | |
} | |
} | |
ans = INT_MAX; | |
for (int i = 0; i < size; i++) { | |
if (ans > matrix[size - 1][i]) { | |
ans = matrix[size - 1][i]; | |
} | |
} | |
return ans; | |
} | |
}; |
單字
** **
!! !!
片語 & 搭配詞
!! !!