Skip to content

Commit 4a85274

Browse files
committed
feat: add solutions to lc problem: No.0931. Minimum Falling Path Sum
1 parent 99fba31 commit 4a85274

File tree

8 files changed

+244
-11
lines changed

8 files changed

+244
-11
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@
185185
- [丑数 II](./solution/0200-0299/0264.Ugly%20Number%20II/README.md)
186186
- [杨辉三角](./solution/0100-0199/0118.Pascal%27s%20Triangle/README.md)
187187
- [杨辉三角 II](./solution/0100-0199/0119.Pascal%27s%20Triangle%20II/README.md)
188+
- [下降路径最小和](./solution/0900-0999/0931.Minimum%20Falling%20Path%20Sum/README.md)
188189
- [礼物的最大价值](./lcof/面试题47.%20礼物的最大价值/README.md)
189190
- [最小路径和](./solution/0000-0099/0064.Minimum%20Path%20Sum/README.md)
190191
- [最长上升子序列](./solution/0300-0399/0300.Longest%20Increasing%20Subsequence/README.md)

README_EN.md

+1
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ Complete solutions to [LeetCode](https://leetcode.com/problemset/all/), [LCOF](h
179179
- [Ugly Number II](./solution/0200-0299/0264.Ugly%20Number%20II/README_EN.md)
180180
- [Pascal's Triangle](./solution/0100-0199/0118.Pascal%27s%20Triangle/README_EN.md)
181181
- [Pascal's Triangle II](./solution/0100-0199/0119.Pascal%27s%20Triangle%20II/README_EN.md)
182+
- [Minimum Falling Path Sum](./solution/0900-0999/0931.Minimum%20Falling%20Path%20Sum/README_EN.md)
182183
- [Minimum Path Sum](./solution/0000-0099/0064.Minimum%20Path%20Sum/README_EN.md)
183184
- [Longest Increasing Subsequence](./solution/0300-0399/0300.Longest%20Increasing%20Subsequence/README_EN.md)
184185
- [Russian Doll Envelopes](./solution/0300-0399/0354.Russian%20Doll%20Envelopes/README_EN.md)

solution/0900-0999/0931.Minimum Falling Path Sum/README.md

+86-1
Original file line numberDiff line numberDiff line change
@@ -56,22 +56,107 @@
5656

5757
<!-- 这里可写通用的实现逻辑 -->
5858

59+
动态规划。
60+
5961
<!-- tabs:start -->
6062

6163
### **Python3**
6264

6365
<!-- 这里可写当前语言的特殊实现逻辑 -->
6466

6567
```python
66-
68+
class Solution:
69+
def minFallingPathSum(self, matrix: List[List[int]]) -> int:
70+
n = len(matrix)
71+
for i in range(1, n):
72+
for j in range(n):
73+
mi = matrix[i - 1][j]
74+
if j > 0:
75+
mi = min(mi, matrix[i - 1][j - 1])
76+
if j < n - 1:
77+
mi = min(mi, matrix[i - 1][j + 1])
78+
matrix[i][j] += mi
79+
return min(matrix[n - 1])
6780
```
6881

6982
### **Java**
7083

7184
<!-- 这里可写当前语言的特殊实现逻辑 -->
7285

7386
```java
87+
class Solution {
88+
public int minFallingPathSum(int[][] matrix) {
89+
int n = matrix.length;
90+
for (int i = 1; i < n; ++i) {
91+
for (int j = 0; j < n; ++j) {
92+
int mi = matrix[i - 1][j];
93+
if (j > 0) {
94+
mi = Math.min(mi, matrix[i - 1][j - 1]);
95+
}
96+
if (j < n - 1) {
97+
mi = Math.min(mi, matrix[i - 1][j + 1]);
98+
}
99+
matrix[i][j] += mi;
100+
}
101+
}
102+
int res = Integer.MAX_VALUE;
103+
for (int j = 0; j < n; ++j) {
104+
res = Math.min(res, matrix[n - 1][j]);
105+
}
106+
return res;
107+
}
108+
}
109+
```
110+
111+
### **C++**
112+
113+
```cpp
114+
class Solution {
115+
public:
116+
int minFallingPathSum(vector<vector<int>>& matrix) {
117+
int n = matrix.size();
118+
for (int i = 1; i < n; ++i) {
119+
for (int j = 0; j < n; ++j) {
120+
int mi = matrix[i - 1][j];
121+
if (j > 0) mi = min(mi, matrix[i - 1][j - 1]);
122+
if (j < n - 1) mi = min(mi, matrix[i - 1][j + 1]);
123+
matrix[i][j] += mi;
124+
}
125+
}
126+
int res = INT_MAX;
127+
for (int j = 0; j < n; ++j) {
128+
res = min(res, matrix[n - 1][j]);
129+
}
130+
return res;
131+
}
132+
};
133+
```
74134
135+
### **Go**
136+
137+
```go
138+
func minFallingPathSum(matrix [][]int) int {
139+
n := len(matrix)
140+
for i := 1; i < n; i++ {
141+
for j := 0; j < n; j++ {
142+
mi := matrix[i - 1][j]
143+
if j > 0 && mi > matrix[i - 1][j - 1] {
144+
mi = matrix[i - 1][j - 1]
145+
}
146+
if j < n - 1 && mi > matrix[i - 1][j + 1] {
147+
mi = matrix[i - 1][j + 1]
148+
}
149+
matrix[i][j] += mi
150+
}
151+
}
152+
res := 10000
153+
for j := 0; j < n; j++ {
154+
if res > matrix[n - 1][j] {
155+
res = matrix[n - 1][j]
156+
}
157+
}
158+
return res
159+
}
75160
```
76161

77162
### **...**

solution/0900-0999/0931.Minimum Falling Path Sum/README_EN.md

+86-1
Original file line numberDiff line numberDiff line change
@@ -50,18 +50,103 @@
5050

5151
## Solutions
5252

53+
Dynamic programming.
54+
5355
<!-- tabs:start -->
5456

5557
### **Python3**
5658

5759
```python
58-
60+
class Solution:
61+
def minFallingPathSum(self, matrix: List[List[int]]) -> int:
62+
n = len(matrix)
63+
for i in range(1, n):
64+
for j in range(n):
65+
mi = matrix[i - 1][j]
66+
if j > 0:
67+
mi = min(mi, matrix[i - 1][j - 1])
68+
if j < n - 1:
69+
mi = min(mi, matrix[i - 1][j + 1])
70+
matrix[i][j] += mi
71+
return min(matrix[n - 1])
5972
```
6073

6174
### **Java**
6275

6376
```java
77+
class Solution {
78+
public int minFallingPathSum(int[][] matrix) {
79+
int n = matrix.length;
80+
for (int i = 1; i < n; ++i) {
81+
for (int j = 0; j < n; ++j) {
82+
int mi = matrix[i - 1][j];
83+
if (j > 0) {
84+
mi = Math.min(mi, matrix[i - 1][j - 1]);
85+
}
86+
if (j < n - 1) {
87+
mi = Math.min(mi, matrix[i - 1][j + 1]);
88+
}
89+
matrix[i][j] += mi;
90+
}
91+
}
92+
int res = Integer.MAX_VALUE;
93+
for (int j = 0; j < n; ++j) {
94+
res = Math.min(res, matrix[n - 1][j]);
95+
}
96+
return res;
97+
}
98+
}
99+
```
100+
101+
### **C++**
102+
103+
```cpp
104+
class Solution {
105+
public:
106+
int minFallingPathSum(vector<vector<int>>& matrix) {
107+
int n = matrix.size();
108+
for (int i = 1; i < n; ++i) {
109+
for (int j = 0; j < n; ++j) {
110+
int mi = matrix[i - 1][j];
111+
if (j > 0) mi = min(mi, matrix[i - 1][j - 1]);
112+
if (j < n - 1) mi = min(mi, matrix[i - 1][j + 1]);
113+
matrix[i][j] += mi;
114+
}
115+
}
116+
int res = INT_MAX;
117+
for (int j = 0; j < n; ++j) {
118+
res = min(res, matrix[n - 1][j]);
119+
}
120+
return res;
121+
}
122+
};
123+
```
64124
125+
### **Go**
126+
127+
```go
128+
func minFallingPathSum(matrix [][]int) int {
129+
n := len(matrix)
130+
for i := 1; i < n; i++ {
131+
for j := 0; j < n; j++ {
132+
mi := matrix[i - 1][j]
133+
if j > 0 && mi > matrix[i - 1][j - 1] {
134+
mi = matrix[i - 1][j - 1]
135+
}
136+
if j < n - 1 && mi > matrix[i - 1][j + 1] {
137+
mi = matrix[i - 1][j + 1]
138+
}
139+
matrix[i][j] += mi
140+
}
141+
}
142+
res := 10000
143+
for j := 0; j < n; j++ {
144+
if res > matrix[n - 1][j] {
145+
res = matrix[n - 1][j]
146+
}
147+
}
148+
return res
149+
}
65150
```
66151

67152
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
public:
3+
int minFallingPathSum(vector<vector<int>>& matrix) {
4+
int n = matrix.size();
5+
for (int i = 1; i < n; ++i) {
6+
for (int j = 0; j < n; ++j) {
7+
int mi = matrix[i - 1][j];
8+
if (j > 0) mi = min(mi, matrix[i - 1][j - 1]);
9+
if (j < n - 1) mi = min(mi, matrix[i - 1][j + 1]);
10+
matrix[i][j] += mi;
11+
}
12+
}
13+
int res = INT_MAX;
14+
for (int j = 0; j < n; ++j) {
15+
res = min(res, matrix[n - 1][j]);
16+
}
17+
return res;
18+
}
19+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
func minFallingPathSum(matrix [][]int) int {
2+
n := len(matrix)
3+
for i := 1; i < n; i++ {
4+
for j := 0; j < n; j++ {
5+
mi := matrix[i-1][j]
6+
if j > 0 && mi > matrix[i-1][j-1] {
7+
mi = matrix[i-1][j-1]
8+
}
9+
if j < n-1 && mi > matrix[i-1][j+1] {
10+
mi = matrix[i-1][j+1]
11+
}
12+
matrix[i][j] += mi
13+
}
14+
}
15+
res := 10000
16+
for j := 0; j < n; j++ {
17+
if res > matrix[n-1][j] {
18+
res = matrix[n-1][j]
19+
}
20+
}
21+
return res
22+
}
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,22 @@
11
class Solution {
2-
public int minFallingPathSum(int[][] A) {
3-
int m = A.length, n = A[0].length;
4-
for (int i = 1; i < m; ++i) {
2+
public int minFallingPathSum(int[][] matrix) {
3+
int n = matrix.length;
4+
for (int i = 1; i < n; ++i) {
55
for (int j = 0; j < n; ++j) {
6-
int min = A[i - 1][j];
7-
if (j > 0) min = Math.min(min, A[i - 1][j - 1]);
8-
if (j < n - 1) min = Math.min(min, A[i - 1][j + 1]);
9-
A[i][j] += min;
6+
int mi = matrix[i - 1][j];
7+
if (j > 0) {
8+
mi = Math.min(mi, matrix[i - 1][j - 1]);
9+
}
10+
if (j < n - 1) {
11+
mi = Math.min(mi, matrix[i - 1][j + 1]);
12+
}
13+
matrix[i][j] += mi;
1014
}
1115
}
12-
return Arrays.stream(A[m - 1]).min().getAsInt();
16+
int res = Integer.MAX_VALUE;
17+
for (int j = 0; j < n; ++j) {
18+
res = Math.min(res, matrix[n - 1][j]);
19+
}
20+
return res;
1321
}
14-
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution:
2+
def minFallingPathSum(self, matrix: List[List[int]]) -> int:
3+
n = len(matrix)
4+
for i in range(1, n):
5+
for j in range(n):
6+
mi = matrix[i - 1][j]
7+
if j > 0:
8+
mi = min(mi, matrix[i - 1][j - 1])
9+
if j < n - 1:
10+
mi = min(mi, matrix[i - 1][j + 1])
11+
matrix[i][j] += mi
12+
return min(matrix[n - 1])

0 commit comments

Comments
 (0)